我有一个数据框,如下所示,我对其进行了一些操作。
原始数据帧 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
Run Code Online (Sandbox Code Playgroud)
我使用下面的代码旋转数据框以生成下面的新数据框:
df_pivoted = df.pivot_table(index=['item', 'day'], columns='time',
values='value', aggfunc='first').reset_index()
Run Code Online (Sandbox Code Playgroud)
df_pivoted:
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
Run Code Online (Sandbox Code Playgroud)
现在我想将 df_pivoted 重新调整到原始数据帧的布局中,即将 00:00:00 到 23:30:00 的列折叠到时间列,特定一天内的每个 24 小时时间,并重新引入值列(使用 df_pivoted.stack?),但我不知道如何做到这一点。有什么想法吗>?
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
Run Code Online (Sandbox Code Playgroud)
值得指出的是,这是有效的,因为您的聚合函数'first'及其组合['index', 'item', 'day', 'time']是唯一的。如果不是,那么数据透视表将聚合数据并丢失无法再次组合在一起的信息。