Python 使用groupby时,如何使用pandas中的一个函数聚合多个列?

Python 使用groupby时,如何使用pandas中的一个函数聚合多个列?,python,pandas,aggregate,Python,Pandas,Aggregate,我有一个数据框,其中包含一个“group”变量、“count”变量和一个“total”变量。对于每个组,我想求count列的和,然后除以total列的和。我如何做到这一点,最好是在一行代码中 下面是一个示例: test_dc = {1:{'group':'A','cnt':3,'total':5}, 2:{'group':'B','cnt':1,'total':8}, 3:{'group':'A','cnt':2,'total':4},

我有一个数据框,其中包含一个“group”变量、“count”变量和一个“total”变量。对于每个组,我想求count列的和,然后除以total列的和。我如何做到这一点,最好是在一行代码中

下面是一个示例:

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')
预期产出(大致):


编辑:将列名从“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'])

您可以使用
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'])

我将使用
agg
eval

test_df.groupby('group').agg('sum').eval('cnt / total')

group
A    0.555556
B    0.333333
dtype: float64

我将使用
agg
eval

test_df.groupby('group').agg('sum').eval('cnt / total')

group
A    0.555556
B    0.333333
dtype: float64