微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 如何将groupby值的总和除以另一个值的count

我想通过’label’和’month’分组来计算每个月和每个标签的销售数量.

Dataset

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

我编写了下面的代码,但它不会将count作为函数并且返回计数未定义错误.

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

有人能告诉我如何获得每个标签每月的计数值吗?

提前致谢.

@H_404_19@解决方法:

你可以使用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及其内置聚合器sum,count和mean在这里显然更方便,但是如果你确实需要使用groupby / apply和自定义函数,你可以使用:

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

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

如果您销售的数量中缺少(NaN)值,则可能有助于知道group / agg同时具有’count’和’size’聚合器:

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

计数总是小于或等于大小.平均值是(非NaN值的)之和除以计数.要查看计数和大小之间的差异,您可以尝试使用以下代码

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐