Python 列名内的循环
我有一个数据框,其中有car_x和car1_y列,van2_x和van2_y列,以及bus3_x和bus3_y列。我需要一个列,它是car1_x*car1_y+van2_x*van2_y+bus3_x*bus3_y 以下代码不起作用: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']进行
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)