python - 分组后多列上的python操作
问题描述
我有一个如下的数据框:
df = {'col_1': [1,2,3,4,5,6,7,8,9,10],
'col_2': [1,1,1,0,0,1,0,0,1,1],
'col_3':['A','A','A','A','A','B','B','B','B','B']}
df = pd.DataFrame(df)
我想要类似的东西:
df['col_4'] = df.groupby(['col_3'])['col_1','col_2'].transform((col_1*col_2)/sum(col_2))
这是每组中的乘法,col_1
然后col_2
除以总和,由 定义。预期的结果应该是:col_2
col_3
df
col_1 col_2 col_3 col_4
0 1 1 A 2.00
1 2 1 A 2.00
2 3 1 A 2.00
3 4 0 A 2.00
4 5 0 A 2.00
5 6 1 B 8.33
6 7 0 B 8.33
7 8 0 B 8.33
8 9 1 B 8.33
9 10 1 B 8.33
有谁知道怎么去那里?
解决方案
假设您希望计算分组的总和,col_1 * col_2
您可以定义一个GroupBy
对象并使用transform
+sum
两次:
g = df.eval('prod=col_1*col_2').groupby('col_3')
df['col_4'] = g['prod'].transform('sum') / g['col_2'].transform('sum')
print(df)
col_1 col_2 col_3 col_4
0 1 1 A 2.000000
1 2 1 A 2.000000
2 3 1 A 2.000000
3 4 0 A 2.000000
4 5 0 A 2.000000
5 6 1 B 8.333333
6 7 0 B 8.333333
7 8 0 B 8.333333
8 9 1 B 8.333333
9 10 1 B 8.333333
推荐阅读
- python - 在 Pandas 中使用 .loc 将集合插入单元格时的行为不一致
- oracle - Oracle - 大量插入的策略,但仅在 OLTP 环境中使用最后一个插入
- amazon-web-services - 压力包在 aws EC2 实例上不可用
- java - Oracle 通过 JPA 排序,数字优先
- python - 在opencv中捕获并保存图像
- regex - 如何通过正则表达式正确减少网址?
- java - 选择具有与使用 spring jpa 不同的字段的实体
- firebase - 有没有办法阻止华为/小米设备杀死后台服务?使用 HMS 会减少这些问题吗?
- python - 如何找到具有值的元素?
- python - 如何创建在特定时间触发自身的python脚本(Django)?