pandas 成对(1对1)乘列以创建新列

ulydmbyx  于 2022-11-20  发布在  其他
关注(0)|答案(1)|浏览(177)

我有这样一个 Dataframe :

Col1 Col2 Col3.... Col64   Col1 Volume Col2 Volume....Col64 Volume.... Col1 Value Col2 Value...Col 64 Value

 2     3   4         5        5           7             9                 3         5
 3     4   5         11       8           6             5                 6         5
 5     3   4         6       10          11             5                 3         4

我想将Col1乘以Col1 Volume,然后除以Col1 Value,并将该值放入名为“Col1 result”的新列中
类似地,将Col2乘以Col2体积,然后除以Col2值,并将该值置于名为“Col2结果”的新列中
我希望对这些列的每一行都这样做。
输出应该是这样的,并且这些列应该附加到现有的 Dataframe 。

Col1 Result  Col2 Result
3.33         4.2
6            4.8
16.6         8.25
...

如何执行此操作?它还必须是1比1乘法,即只有第1列应乘以第1列体积,然后除以第1列值。
手动操作会花费大量时间。

ergxz8rk

ergxz8rk1#

使用DataFrame.filter获取所有列,其中VolumeValue用于字符串结尾,删除子字符串,然后按df1中的列筛选df,使用DataFrame.add_suffix对列进行乘法和除法运算,替换缺少的列0并追加到原始DataFrame:

df1 = df.filter(regex='Volume$').rename(columns=lambda x: x.replace(' Volume',''))
df2 = df.filter(regex='Value$').rename(columns=lambda x: x.replace(' Value',''))

df = df.join(df[df1.columns].mul(df1).div(df2).add_suffix(' Result').fillna(0))
print (df)
   Col1  Col2  Col3  Col64  Col1 Volume  Col2 Volume  Col64 Volume  \
0     2     3     4      5            5            7             9   
1     3     4     5     11            8            6             5   

   Col1 Value  Col2 Value  Col64 Value  Col1 Result  Col2 Result  Col64 Result  
0           3           5            7     3.333333          4.2      6.428571  
1           6           5            7     4.000000          4.8      7.857143

相关问题