python - 如果满足条件,则在 pandas 数据框中进行数学运算
问题描述
我是熊猫新手。
我的数据框看起来像这样:
a1 b1 c1 d1 e1
A 10 10 1 2 0
B 20 20 2 1 1
C 30 30 3 1 0
D 40 40 4 1 1
E 40 40 4 1 2
F 40 40 4 1 1
我只想对e1
相同的值进行数学运算。
例如: ( a1A
+ a1C
) / ( c1A
+ c1C
) 表示C
相同的值。所以我最终会得到这样的数据框:
a1 b1 c1 d1 e1 result
A 10 10 1 2 0 (a1A + a1C) / ( c1A + c1C )
B 20 20 2 1 1 (a1B + a1D+ a1F) / ( c1B + c1D+ c1F )
C 30 30 3 1 0 Do not calculate it because its already calculated
D 40 40 4 1 1 Do not calculate it because its already calculated
E 40 40 4 1 2 (a1E / c1E)
F 40 40 4 1 1 Do not calculate it because its already calculatedcalculated
我不知道如何将条件应用于计算,如果已经计算过,我将如何省略计算。
谢谢你的建议。
解决方案
首先汇总每个组的总和,然后按差异删除重复项Series.drop_duplicates
和最后一次使用Series.map
:
s = df.groupby('e1')['a1','c1'].sum()
df['new'] = df['e1'].drop_duplicates().map(s.a1 / s.c1)
print (df)
a1 b1 c1 d1 e1 new
A 10 10 1 2 0 10.0
B 20 20 2 1 1 10.0
C 30 30 3 1 0 NaN
D 40 40 4 1 1 NaN
E 40 40 4 1 2 10.0
F 40 40 4 1 1 NaN
另外我认为在熊猫中显然不需要按唯一值映射,显然是使用GroupBy.transform
并添加了由映射数据填充的新列:
df2 = df.groupby('e1')['a1','c1'].transform('sum')
print (df2)
a1 c1
A 40 4
B 100 10
C 40 4
D 100 10
E 40 4
F 100 10
df['new'] = df2.a1 / df2.c1
print (df)
a1 b1 c1 d1 e1 new
A 10 10 1 2 0 10.0
B 20 20 2 1 1 10.0
C 30 30 3 1 0 10.0
D 40 40 4 1 1 10.0
E 40 40 4 1 2 10.0
F 40 40 4 1 1 10.0
推荐阅读
- matlab - imshow/imwrite 将所有像素值更改为 1
- javascript - NodeJS在发送请求并设置间隔以重复该功能后,我更新了我的代码源,但我的代码的代码源响应没有更新
- mongodb - 与 MongoDB 中的多用途实体的不同实体关联?
- mysql - 无法创建表`cms`.`invoice`(errno:150“外键约束格式不正确”)
- xslt - 如何在 XSLT 中使用 group-by 标记化后删除相同的数字
- javascript - 将 jquery 版本从 v2.1.3 更新到 v3.5.1 时需要考虑的事项
- android - 使用 Kotlin Coroutines 更新我的 TextView 会导致它崩溃:
- azure-data-factory - ADF SQL 链接服务连接失败
- javascript - 如何检查无效的用户 ID 和未禁止的用户
- keras - 用于视频输入的 LSTM