带有列值的Python数据透视表

时间:2017-10-27 09:04:30

标签: python-3.x pandas pandas-groupby

我是python的新手,需要小枢轴功能的帮助

我有一个表格,其中包含上述格式的数据

order_id    primary_dish    primary_cat dish_id order_date  average_adoption
927852        54438             1         54465   2016-12-11    37.5
927852        54438             1         54443   2016-12-11    37.5
927852        54453             1         54453   2016-12-11    25.61

使用pandas我已经使用dish_id转移了上面的表但是我想用average_adotion列替换那些被提升为NAN的值,这是我无法做到的

目前输出如下

order_id primary_dish primary_cat   54438   54443   54453   54465
  927852      54438          1       NaN    1.0      1.0    1.0
  927852      54443          1        1.0   NaN      1.0    1.0
  927852      54453          1        1.0   1.0      NaN    1.0

枢轴功能

dish.pivot_table(index=['order_id', 'primary_dish', 'primary_cat'],
                 columns='dish_id',values=['average_adoption'], aggfunc='size'
                ).reset_index()

输出应该看起来像

order_id primary_dish primary_cat   54438   54443   54453   54465
  927852      54438          1       37.5   1.0      1.0    1.0
  927852      54443          1       1.0    25.61    1.0    1.0
  927852      54453          1       1.0    1.0      25.61  1.0

1 个答案:

答案 0 :(得分:0)

第一个枢轴而不是reset_index以便以后对齐:

df = dish.pivot_table(index=['order_id', 'primary_dish', 'primary_cat'],
                               columns='dish_id',values=['average_adoption'], aggfunc='size')

mean创建系列,使用相同的索引,例如pivot_table

s = dish.groupby(['order_id','primary_dish','primary_cat'])['average_adoption'].mean()

NaN替换为mask isnull

print (df.mask(df.isnull(), s, axis=0).reset_index())
dish_id  order_id  primary_dish  primary_cat  54443  54453  54465
0          927852         54438            1   1.00   37.5   1.00
1          927852         54453            1  25.61    1.0  25.61

也应该工作(但对我来说不是在pandas 0.20.3):

print (df.fillna(s))