gpt4 book ai didi

python - Pandas groupby 列并乘以聚合函数中的其他两列

转载 作者:行者123 更新时间:2023-12-03 07:57:11 27 4
gpt4 key购买 nike

我有一个希望很简单的问题需要一些帮助堆栈助手!我有一个数据框:

df = pd.DataFrame({'Quantity': [2, 3, 4, 1, 2, 1, 4, 5],
'User': ['A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
'Price': [5, 3, 2, 6, 2, 3, 4, 5],
'Shop': ['X', 'X', 'X', 'Y', 'Z', 'Z', 'X', 'Y'],
'Day': ['M', 'T', 'W', 'W', 'M', 'T', 'M', 'W']
})


| QuantityUser Price Shop Day
0 2 A 5 X M
1 3 A 3 X T
2 4 B 2 X W
3 1 B 6 Y W
4 2 B 2 Z M
5 1 C 3 Z T
6 4 C 4 X M
7 5 C 5 Y W

当我尝试按商店和日期汇总数据时,我的麻烦就来了。我希望了解一家商店每天的用户数量以及当天在该商店的平均消费额。所以在 SQL 中它将是:AVG(Quantity*Price)

我有第一部分:

df.groupby(by=['Shop','Day']).agg({'User': 'count'})

但我对其他聚合的唯一解决方案是首先创建一个列,然后聚合它。

df['Spend'] = df['Price'] * df['Quantity']
df.groupby(by=['Shop','Day']).agg({'User': 'count' ,'Spend' :'mean' })

我缺少更好的方法吗?理想情况下,我希望聚合与 Count 聚合一起发生,而不需要创建新列。

最佳答案

您可以在不创建新列的情况下实现这一点,如下所示:

result = df.groupby(by=['Shop', 'Day']).agg(
User=('User', 'count'),
Spend=('Price', lambda x: (x * df.loc[x.index, 'Quantity']).mean())
)

输出与您的相同:

                  User    Spend
Shop Day
X M 2 13.0
T 1 9.0
W 1 8.0
Y W 2 15.5
Z M 1 4.0
T 1 3.0

关于python - Pandas groupby 列并乘以聚合函数中的其他两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75761188/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com