python - 乘以多列 Pandas

标签 python pandas multiple-columns

我有一个这样的数据框,但有更多的列,我想将每两个相邻的列相乘,并在它旁边的新列中说明两者的乘积,并将其命名为 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/

相关文章:

python - Pandas - 选择一小时最后一分钟的数据作为 24 小时数据

python - 在多个条件下合并 DataFrames - 而不是专门针对相等的值

python - pandas 为每一行绘制线段

python - 分组数据帧上的列名输出到 CSV

python - 如何在 Pandas 中相互划分多个列

Python - QTableWidget.selectedRanges() 返回选择的多个范围

jquery - 如何去除可折叠柱子/ Accordion 周围难看的填充物

MySQL按列和列值排序

python - IMDB 投票与评级的 matplotlib 图

python - 从字典创建 pandas 数据框