python-3.x - 在pandas列上执行迭代减法和除法运算的有效方法
问题描述
我有以下数据框-
A B C Result
0 232 120 9 91
1 243 546 1 12
2 12 120 5 53
我想执行以下类型的操作-
A B C Result A-B/A+B A-C/A+C B-C/B+C
0 232 120 9 91 0.318182 0.925311 0.860465
1 243 546 1 12 -0.384030 0.991803 0.996344
2 12 120 5 53 -0.818182 0.411765 0.920000
我正在使用
df['A-B/A+B']=(df['A']-df['B'])/(df['A']+df['B'])
df['A-C/A+C']=(df['A']-df['C'])/(df['A']+df['C'])
df['B-C/B+C']=(df['B']-df['C'])/(df['B']+df['C'])
我认为这是一种非常粗糙和丑陋的方式。如何以更正确的方式做到这一点?
解决方案
您可以执行以下操作:
# take columns in a list except the last column
colnames = df.columns.tolist()[:-1]
# compute
for i, c in enumerate(colnames):
if i != len(colnames):
for k in range(i+1, len(colnames)):
df[c + '_' + colnames[k]] = (df[c] - df[colnames[k]]) / (df[c] + df[colnames[k]])
# check result
print(df)
A B C Result A_B A_C B_C
0 232 120 9 91 0.318182 0.925311 0.860465
1 243 546 1 12 -0.384030 0.991803 0.996344
2 12 120 5 53 -0.818182 0.411765 0.920000
推荐阅读
- java - 无法启动 Java Flight Recorder 或附加 Java Mission Control
- symfony - Load Vue 3 Component inside mounted div and pass PHP data
- java - 阻止 WebView 加载特定的 URL
- office-js - 如何在更新后使用 Internet Explorer 11 运行 Word 加载项(Windows 10 版本 >= 1903 / Office 365 版本 >= 16.0.116291)
- angular - PrimeNG:没有 MenuModel 的简单按钮下拉菜单
- docker - 新用户帐户 - 拒绝进入 docker 的权限
- r - 从嵌套列表数据框中删除 NA
- azure-mobile-services - 适用于 Xamarin 表单的 Azure 移动服务 - 冲突解决
- ruby-on-rails - 如何在Rails中将Array的值一一输入到数据库中?
- c - 仅在给定参数时在 Makefile 编译中添加标志