gpt4 book ai didi

python - 如何将 groupby 值的总和除以另一个值的计数

转载 作者:太空狗 更新时间:2023-10-30 02:37:41 25 4
gpt4 key购买 nike

我想按“标签”和“月份”分组,以汇总每个月和每个标签的销售数量。

Dataset

我正在尝试使用“groupby 并应用”方法来实现此目的,但不确定如何计算每个标签的月份。比如,对于标签值 AFFLELOU (DOS),我有两个第 7 个月的值。所以,我应该将销售数量相加并除以 2。对于第 9 个月和第 10 个月,我只有一个值,因此计数为 1,它将除以销售数量。

我写了下面的代码,但它没有将 count 作为函数并返回 count not defined 错误。

t1.groupby(['label', 'month']).apply(lambda x: x['Quantity sold'] 
.sum()/count('month'))

谁能告诉我如何获取每个标签每个月的计数值?

提前致谢。

最佳答案

您可以使用 agg('mean') 代替求和、计数和除法:

t1.groupby(['label', 'month'])['Quantity sold'].agg('mean') 

或者,如果您确实希望保留总和和计数,请使用:

t1.groupby(['label', 'month'])['Quantity sold'].agg(['sum', 'count', 'mean']) 

例如,

import numpy as np
import pandas as pd

t1 = pd.DataFrame(np.random.randint(4, size=(20,3)), columns=['label', 'Quantity sold', 'month'])
t1.groupby(['label', 'month'])['Quantity sold'].agg(['sum', 'count', 'mean'])

产生一个类似的DataFrame

             sum  count  mean
label month
0 1 2 1 2.00
2 0 1 0.00
3 2 2 1.00
1 1 1 2 0.50
2 3 1 3.00
3 1 1 1.00
2 0 0 1 0.00
1 0 3 0.00
3 5 4 1.25
3 0 1 1 1.00
1 0 1 0.00
2 0 1 0.00
3 3 1 3.00

使用 groupby/agg 及其内置聚合器 sumcountmean 在这里显然更方便,但是,如果您确实需要将 groupby/apply 与自定义函数一起使用,您可以使用:

t1.groupby(['label', 'month']).apply(lambda x: x['Quantity sold'].sum()/len(x))

请注意,虽然使用 groupby/apply 调用自定义函数可为您提供更大的灵 active ,但这是有代价的,因为为每个组调用一次自定义 Python 函数通常比调用可用的内置 Cythonized 聚合器慢在 groupby/agg 中。


如果您在 Quantity sold 中缺少 (NaN) 值,了解 group/agg 有两个 可能会有所帮助'count''size' 聚合器:

  • 'count' 返回非NaN 值的数量
  • 'size' 返回组的长度(包括NaN 值)

count 总是小于或等于 sizemeansum(非NaN 值)除以count。要查看 countsize 之间的区别,您可以使用以下代码进行试验:

np.random.seed(2018)
t1 = pd.DataFrame(np.random.randint(4, size=(50,3)), columns=['label', 'Quantity sold', 'month'])
t1.loc[np.random.choice([True, False], len(t1)), 'Quantity sold'] = np.nan
t1.groupby(['label', 'month'])['Quantity sold'].agg(['sum', 'count', 'size', 'mean'])

产生

             sum  count  size      mean
label month
0 1 0.0 0 3 NaN
2 6.0 2 2 3.000000
3 0.0 0 1 NaN
1 0 3.0 2 5 1.500000
1 0.0 0 1 NaN
2 5.0 3 5 1.666667
3 0.0 2 3 0.000000
2 0 7.0 3 5 2.333333
1 4.0 4 8 1.000000
2 5.0 2 3 2.500000
3 5.0 2 3 2.500000
3 0 1.0 2 5 0.500000
1 3.0 1 1 3.000000
2 2.0 1 2 2.000000
3 2.0 1 3 2.000000

关于python - 如何将 groupby 值的总和除以另一个值的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49514302/

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