大熊猫枢轴数据框与多个groupby

时间:2018-09-29 02:07:15

标签: python pandas dataframe

我有一个熊猫数据框,其数据如下:

df:

cf push CloudConsoleApp --health-check-type none -s windows2016 -b binary_buildpack --no-route -c 'my_app.exe'

item + day + time的组合是唯一的

我正在尝试转换为:

     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

我尝试过:

     item   day         time_0    time_1   time_2  
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     ... 

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

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

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

2 个答案:

答案 0 :(得分:2)

您可以使用pd.pivot_table

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

答案 1 :(得分:2)

另一个解决方案是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

请记住,df.unstack在熊猫中是指索引:它会取消堆栈索引的最内层并将其旋转到列中。

相关问题