我有一个这样的数据框,但有更多的列,我想将每两个相邻的列相乘,并在它旁边的新列中说明两者的乘积,并将其命名为 Sub_pro
最后,将所有 Sub_pro
的总和放在名为 F_Pro
的列中,并将精度降低到小数点后 3 位。我不知道如何获取 Sub_pro
列。下面是我的代码。
import pandas as pd
df = pd.read_excel("C:dummy")
df['F_Pro'] = ("Result" * "Attribute").sum(axis=1)
df.round(decimals=3)
print (df)
输入
Id Result Attribute Result1 Attribute1
1 0.5621 0.56 536 0.005642
2 0.5221 0.5677 2.15 93
3 0.024564 5.23 6.489 8
4 11.564256 4.005 0.45556 5.25
5 0.6123 0.4798 0.6667 5.10
欲望输出
id Result Attribute Sub_Pro Result1 Attribute1 Sub_pro1 F_Pro
1 0.5621 0.56 0.314776 536 0.005642 3.024112 3.338888
2 0.5221 0.5677 0.29639617 2.15 93 199.95 200.2463962
3 0.024564 5.23 0.12846972 6.489 8 51.912 52.04046972
4 11.564256 4.005 46.31484528 0.45556 5.25 2.39169 48.70653528
5 0.6123 0.4798 0.29378154 0.6667 5.1 3.40017 3.69395154
最佳答案
因为您有几个名称相同的列,所以这里是使用 filter
的一种方法。要查看它是如何工作的,请在您的 df
上执行 df.filter(like='Result')
并获得名称中包含 Result 的列:
Result Result1
0 0.562100 536.00000
1 0.522100 2.15000
2 0.024564 6.48900
3 11.564256 0.45556
4 0.612300 0.66670
您可以创建一个包含“Sub_Pro”列的数组:
import numpy as np
arr_sub_pro = np.round(df.filter(like='Result').values* df.filter(like='Attribute').values,3)
然后您将获得 sub_pro 列的值,例如 arr_sub_pro
:
array([[3.1500e-01, 3.0240e+00],
[2.9600e-01, 1.9995e+02],
[1.2800e-01, 5.1912e+01],
[4.6315e+01, 2.3920e+00],
[2.9400e-01, 3.4000e+00]])
现在您需要将它们添加到数据框中的正确位置,我认为循环 for
是必要的
for nb, col in zip( range(arr_sub_pro.shape[1]), df.filter(like='Attribute').columns):
df.insert(df.columns.get_loc(col)+1, 'Sub_pro{}'.format(nb), arr_sub_pro[:,nb])
这里我得到了 Attibut(nb) 列的位置,并在下一个位置插入了 arr_sub_pro
的 nb 列的值
要添加“F_Pro”列,您可以:
df.insert(len(df.columns), 'F_Pro', arr_sub_pro.sum(axis=1))
最终的 df
如下所示:
Id Result Attribute Sub_pro0 Result1 Attribute1 Sub_pro1 \
0 1 0.562100 0.5600 0.315 536.00000 0.005642 3.024
1 2 0.522100 0.5677 0.296 2.15000 93.000000 199.950
2 3 0.024564 5.2300 0.128 6.48900 8.000000 51.912
3 4 11.564256 4.0050 46.315 0.45556 5.250000 2.392
4 5 0.612300 0.4798 0.294 0.66670 5.100000 3.400
F_Pro
0 3.339
1 200.246
2 52.040
3 48.707
4 3.694
关于python - 乘以多列 Pandas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51065181/