Python 使用groupby时,如何使用pandas中的一个函数聚合多个列?
我有一个数据框,其中包含一个“group”变量、“count”变量和一个“total”变量。对于每个组,我想求count列的和,然后除以total列的和。我如何做到这一点,最好是在一行代码中 下面是一个示例: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},
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