我有一个数据框,其中包含一个“组”变量、一个“计数”变量和一个“总计”变量。对于每个组,我想对计数列求和并将其除以总列的总和。我该怎么做,最好是用一行代码?
这是一个可以使用的例子:
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'])
