Python 如何根据分组列计算DF值
我对熊猫数据帧比较陌生,我必须做简单的计算,但到目前为止,我还没有找到一个好的方法 基本上我所拥有的是:Python 如何根据分组列计算DF值,python,pandas,dataframe,Python,Pandas,Dataframe,我对熊猫数据帧比较陌生,我必须做简单的计算,但到目前为止,我还没有找到一个好的方法 基本上我所拥有的是: type group amount 1 A real 55 2 A fake 12 3 B real 610 4 B fake 23 5 B real 45 现在,我必须添加一个新的列来显示冒牌货在
type group amount
1 A real 55
2 A fake 12
3 B real 610
4 B fake 23
5 B real 45
现在,我必须添加一个新的列来显示冒牌货在类型总数中所占的百分比。所以这个表的简单公式是A12/(55+12)*100
和B23/(610+23+45)*100
,这个表应该是这样的:
type group amount percentage
1 A real 55
2 A fake 12 17.91
3 B real 610
4 B fake 23
5 B real 45 3.39
我知道groupby的语句,基本上知道我需要的所有组件(我猜…),但不知道如何组合才能得到这个结果。试试这个:
percentage = {}
for type in df.type.unique():
numerator = df[(df.type == type) & (df.group == 'fake')].amount.sum()
denominator = df[(df.type == type)].amount.sum()
percentage[type] = numerator / denominator * 100
df['percentage'] = list(df.type.map(percentage))
如果在组中处理多个伪,则按类型。我们可以再小心一点。我将设置索引以在转换时保留类型
和组
列
c = ['type', 'group']
d1 = df.set_index(c, append=True)
d1.amount /= d1.groupby(level=['type']).amount.transform('sum')
d1.reset_index(c)
从这里,您可以选择不处理该问题,或者合并组
列
d1.groupby(level=c).sum().reset_index()
如果您想确保每种类型有多个假组,可以执行以下操作
type_group_total = df.groupby(['type', 'group']).transform('sum')
type_total = df.groupby('type')[['amount']].transform('sum')
df['percentage'] = type_group_total / type_total
输出
type group amount percentage
0 A real 55 0.820896
1 A fake 12 0.179104
2 B real 610 0.899705
3 B fake 23 0.100295
4 B fake 45 0.100295
谢谢,这给了我很多新的工具来使用!这个答案假设每个组只有一个假组type@TedPetrou是的
type group amount percentage
0 A real 55 0.820896
1 A fake 12 0.179104
2 B real 610 0.899705
3 B fake 23 0.100295
4 B fake 45 0.100295