行级别的基于列标题的求和积的有效方法

时间:2019-06-17 07:06:14

标签: python pandas

我有一个看起来有点像下面的数据框(请注意,除了COST和UNITS以外,还有其他列)

TIME      COST1   UNITS1_1   COST2   UNITS2_1   ....  COSTN  UNITSN_1 
21:55:51  25      100        20       50        ....   22    130
22:55:51  23      100        24       150        ....   22    230
21:58:51  28      100        22       250        ....   22    430

我正在计算每一行的总和(新列),以便计算并计算(COST1 * UNITS1_1)+(COST2 * UNITS2_1)+(COSTN * UNITSN_1)

您能在这里建议一种有效的方法吗? 那些正在考虑的是根据列的过滤条件和/或使用lambda函数来计算必要的数字来遍历列名。

1 个答案:

答案 0 :(得分:1)

按位置选择列,按DataFrame.to_numpyDataFrame.values转换为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)

或使用DataFrame.filter来选择列:

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