Python 基于列标题的行级sumproduct高效实现方法
我有一个看起来有点像下面的数据框(请注意,除了成本和单位之外还有其他列) 我正在考虑为每一行计算一个sumproduct(新列),以便(COST1*UNITS1_1)+(COST2*UNITS2_1)+(COSTN*UNITSN_1)计算并存储在此列中 你能给我一个有效的办法吗。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[:,
我考虑的是根据列的筛选条件循环遍历列名和/或使用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