在groupby之后为唯一多索引值的组合填充零值

2024-10-02 04:17:31 发布

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

为了更好地解释问题,让我们假设我有一个有3个独特客户的商店,我的数据框包含我的客户的每一次购买,包括工作日、名称和支付价格。在

     name  price  weekday
0    Paul  18.44        0
1   Micky   0.70        0
2   Sarah   0.59        0
3   Sarah   0.27        1
4    Paul   3.45        2
5   Sarah  14.03        2
6    Paul  17.21        3
7   Micky   5.35        3
8   Sarah   0.49        4
9   Micky  17.00        4
10   Paul   2.62        4
11  Micky  17.61        5
12  Micky  10.63        6

我想得到的信息是每一个独特的客户每个工作日的平均价格。在类似的情况下,我经常做的是用sum对多个列进行分组,然后取列子集的平均值。在

^{pr2}$

当然,只有当我所有的客户每天至少有一次购买时,这才有效。 对于第一个groupby之后没有求和的唯一索引值之间的所有组合,有没有一种优雅的方法来获得零值?在

到目前为止,我的解决方案是要么重新索引我从分组列的唯一值创建的多索引,要么是unstack fillna堆栈的组合,但这两种解决方案都不能真正满足我的需要。在

感谢你的帮助!在


Tags: 数据name名称信息客户价格解决方案price
2条回答

我认为您可以使用pivot_table一次完成所有步骤。我不确定您想要什么,但是来自pivot_table的默认聚合是平均值。你可以把它改成“sum”。在

df1 = df.pivot_table(index='name', columns='weekday', values='price', 
                     fill_value=0, aggfunc='sum')

weekday      0     1      2      3      4      5      6
name                                                   
Micky     0.70  0.00   0.00   5.35  17.00  17.61  10.63
Paul     18.44  0.00   3.45  17.21   2.62   0.00   0.00
Sarah     0.59  0.27  14.03   0.00   0.49   0.00   0.00

然后取每列的平均值。在

^{pr2}$

IIUC,让我们使用unstackfillna,然后stack

df_out = df.groupby(['name','weekday']).sum().unstack().fillna(0).stack()

输出:

^{pr2}$

而且

df_out.groupby('weekday').mean()

输出:

            price
weekday          
0        6.576667
1        0.090000
2        5.826667
3        7.520000
4        6.703333
5        5.870000
6        3.543333

相关问题 更多 >

    热门问题