Python 列名内的循环

Python 列名内的循环,python,pandas,loops,Python,Pandas,Loops,我有一个数据框,其中有car_x和car1_y列,van2_x和van2_y列,以及bus3_x和bus3_y列。我需要一个列,它是car1_x*car1_y+van2_x*van2_y+bus3_x*bus3_y 以下代码不起作用: modes = 'car', 'van', 'bus' for mode in modes: df['{var}'] = df['{var}_x']*df['{var}_y'] 然后,我将对df['car'],df['van']和df['bus']进行

我有一个数据框,其中有car_x和car1_y列,van2_x和van2_y列,以及bus3_x和bus3_y列。我需要一个列,它是car1_x*car1_y+van2_x*van2_y+bus3_x*bus3_y

以下代码不起作用:

modes = 'car', 'van', 'bus'

for mode in modes:
    df['{var}'] = df['{var}_x']*df['{var}_y']

然后,我将对df['car'],df['van']和df['bus']进行求和,但是上面的语法是关闭的

要修复代码,需要使用f-strings,以便让python知道
{var}
应该作为其值插入,而不是字符串
“{var}”

但这需要额外的求和步骤才能得到“结果”


让我们省去额外的步骤,在这里使用
einsum
更快地完成这项工作。过滤掉
\u x
\u y
列,然后使用
einsum
指定乘积和运算

x = df.filter(like='_x')
y = df.filter(like='_y')

df['result'] = np.einsum('ij,ij->i', x, y)

多亏了
过滤器
步骤,不再需要维护单独的
模式
列表。

我将使用
groupby

df.groupby(df.columns.str.split('_').str[0],axis=1).prod()[['car', 'van', 'bus']].sum(1)

非常感谢,我错过了f。不过,您的代码更干净。
x = df.filter(like='_x')
y = df.filter(like='_y')

df['result'] = np.einsum('ij,ij->i', x, y)
df.groupby(df.columns.str.split('_').str[0],axis=1).prod()[['car', 'van', 'bus']].sum(1)