Skip to main content
 首页 » 编程设计

python之使用 groupby 时,如何在 pandas 中使用一个函数聚合多个列

2025年05月04日25oomusou

我有一个数据框,其中包含一个“组”变量、一个“计数”变量和一个“总计”变量。对于每个组,我想对计数列求和并将其除以总列的总和。我该怎么做,最好是用一行代码?

这是一个可以使用的例子:

test_dc = {1:{'group':'A','cnt':3,'total':5}, 
           2:{'group':'B','cnt':1,'total':8}, 
           3:{'group':'A','cnt':2,'total':4}, 
           4:{'group':'B','cnt':6,'total':13} 
          } 
test_df = pd.DataFrame.from_dict(test_dc, orient='index') 

预期输出(大致):

group | average 
    A | 0.55555 
    B | 0.33333 

编辑:将列名称从“count”更改为“cnt”,因为在 groupby 对象上似乎存在一个现有的 count() 方法。

请您参考如下方法:

您可以使用 DataFrame.groupby 按列分组,然后对其调用 sum 以获得总和。

>>> df = test_df 
    .groupby('group') 
    .sum() 
>>> df       
       count  total 
group               
A          5      9 
B          7     21 

然后您可以捕获该列并将它们分开以获得答案。

>>> df['count'] / df['total'] 
    group 
A    0.555556 
B    0.333333 
dtype: float64 

您可以利用 DataFrame.pipe 运算符在一行中完成此操作:

test_df 
    .groupby('group') 
    .sum() 
    .pipe(lambda df: df['count'] / df['total'])