我有一个看起来有点像下面的数据框(请注意,除了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函数来计算必要的数字来遍历列名。
答案 0 :(得分:1)
按位置选择列,按DataFrame.to_numpy
或DataFrame.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