带有多重groupby的pandas数据帧枢轴

2024-03-29 09:47:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pandas数据框,数据如下:

数据框:

     item   day         time      data  
0   item_0  2012-12-02  00:00:01  0.81  
1   item_0  2012-12-02  00:00:02  0.07
2   item_0  2012-12-03  00:00:00  0.84  
3   item_1  2012-12-02  00:00:01  0.47

项目+日期+时间的组合是唯一的

我正在努力转变为:

^{pr2}$

我试过:

df_stage_1 = df.groupby(['item','day']).apply(lambda x: x['time'].tolist()).reset_index()

上面的代码生成了一个列表,但是时间从00:00:00开始没有对齐-我可以检查列表并添加和跟踪索引(因此可以在这些索引的值列表中添加Nan)

df_stage_1 = pd.DataFrame(df_stage_1.tolist(), )

上面的代码为我提供了一个(未对齐)时间值的dataframe,我可以将其对齐(见上文)并将其附加到在上面步骤中创建的dataframe中,但是我无法解决如何在正确的时间对齐列中获取dataframe的值


Tags: 数据项目dataframepandasdf列表datatime
2条回答

您可以使用^{}

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

print(res)

time    item         day  00:00:00  00:00:01  00:00:02
0     item_0  2012-12-02       NaN      0.81      0.07
1     item_0  2012-12-03      0.84       NaN       NaN
2     item_1  2012-12-02       NaN      0.47       NaN

另一个解决方案是set_indexunstackreset_index

df.set_index(['item', 'day', 'time'])['data'].unstack().reset_index()

time    item         day  00:00:00  00:00:01  00:00:02
0     item_0  2012-12-02       NaN      0.81      0.07
1     item_0  2012-12-03      0.84       NaN       NaN
2     item_1  2012-12-02       NaN      0.47       NaN

请记住,pandas中的df.unstack指的是索引:它将索引的最内层拆开并将其旋转到列中。在

相关问题 更多 >