Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于列标题的行级sumproduct高效实现方法_Python_Pandas - Fatal编程技术网

Python 基于列标题的行级sumproduct高效实现方法

Python 基于列标题的行级sumproduct高效实现方法,python,pandas,Python,Pandas,我有一个看起来有点像下面的数据框(请注意,除了成本和单位之外还有其他列) 我正在考虑为每一行计算一个sumproduct(新列),以便(COST1*UNITS1_1)+(COST2*UNITS2_1)+(COSTN*UNITSN_1)计算并存储在此列中 你能给我一个有效的办法吗。 我考虑的是根据列的筛选条件循环遍历列名和/或使用lambda函数计算必要的数目。按位置选择列,按或转换为numpy数组,将它们乘以最后一个和: #pandas 0.24+ df['new'] = (df.iloc[:,

我有一个看起来有点像下面的数据框(请注意,除了成本和单位之外还有其他列)

我正在考虑为每一行计算一个sumproduct(新列),以便(COST1*UNITS1_1)+(COST2*UNITS2_1)+(COSTN*UNITSN_1)计算并存储在此列中

你能给我一个有效的办法吗。
我考虑的是根据列的筛选条件循环遍历列名和/或使用lambda函数计算必要的数目。

按位置选择列,按或转换为numpy数组,将它们乘以最后一个和:

#pandas 0.24+
df['new'] = (df.iloc[:, ::2].to_numpy() * df.iloc[:, 1::2].to_numpy()).sum(axis=1)
#pandas lower
#df['new'] = (df.iloc[:, ::2].values * df.iloc[:, 1::2].values).sum(axis=1)
或用于选择列:

df['new'] = (df.filter(like='COST').to_numpy()*df.filter(like='UNITS').to_numpy()).sum(axis=1)

df['new'] = (df.filter(like='COST').values*df.filter(like='UNITS').values).sum(axis=1)


你能帮我解释一下它到底在做什么吗。。to_numpy()似乎是新的?@asimo-是的,它将数据帧转换为numpy数组,替代方法是
。值

df['new'] = (df.filter(like='COST').to_numpy()*df.filter(like='UNITS').to_numpy()).sum(axis=1)

df['new'] = (df.filter(like='COST').values*df.filter(like='UNITS').values).sum(axis=1)
print (df)
          COST1  UNITS1_1  COST2  UNITS2_1  COSTN  UNITSN_1    new
TIME                                                              
21:55:51     25       100     20        50     22       130   6360
22:55:51     23       100     24       150     22       230  10960
21:58:51     28       100     22       250     22       430  17760