我是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
答案 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()
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))