代码之家  ›  专栏  ›  技术社区  ›  proximacentauri

将列透视到行

  •  1
  • proximacentauri  · 技术社区  · 6 年前

    原始数据帧df:

    index   item   value    day     time
    0   P472   0.126    2011-12-08  00:00:00
    1   P472   0.12     2011-12-08  00:30:00
    2   P472   0.119    2011-12-08  01:00:00
    3   P472   0.425    2011-12-08  01:30:00
    4   P472   0.154    2011-12-08  02:00:00
    

    我用下面的代码旋转数据框,生成下面的新数据框:

    df_pivoted = df.pivot_table(index=['item', 'day'], columns='time',
                     values='value', aggfunc='first').reset_index()
    

    数据框旋转:

    index   item   day      00:00:00 00:30:00 ... 23:30:00
    0   P472   2011-12-08   0.126    0.12     ...   0.18
    1   P473   2011-12-08   0.5      0.55     ...   0.30
    

    现在我想将df\u pivoted重新透视到原始数据帧的布局中,即将00:00:00到23:30:00的列折叠到一个时间列,在特定的一天内每24小时一次,并重新引入值列(使用df\u pivoted.stack?),但我无法解决如何做到这一点。有什么想法吗;?

    1 回复  |  直到 6 年前
        1
  •  3
  •   jpp    6 年前

    pd.pivot_table 可通过 pd.melt

    df_melted = df_pivoted.melt(id_vars=['index', 'item', 'day', 'time'],
                                value_vars=['value']).drop('variable', 1)
    
    print(df)
    
       index  item  value         day      time
    0      0  P472  0.126  2011-12-08  00:00:00
    1      1  P472  0.120  2011-12-08  00:30:00
    2      2  P472  0.119  2011-12-08  01:00:00
    3      3  P472  0.425  2011-12-08  01:30:00
    4      4  P472  0.154  2011-12-08  02:00:00
    

    值得指出的是,这是有效的,因为聚合函数 'first' 以及 ['index', 'item', 'day', 'time']