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的列

以下代码不起作用:

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

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

然后我会在df [‘car’],df [‘van’]和df [‘bus’]之间求和,但上面的语法是关闭的.

最佳答案 要修复你的代码,你需要使用f-string让python知道应该插入{var}作为它的值,而不是字符串“{var}”.

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

但是这需要额外的总和来获得“结果”.

df['result'] = df[list(modes)].sum(axis=1)

让我们在这里使用einsum来减少额外的步骤并快速完成.过滤掉_x和_y列,然后使用einsum指定产品总和操作.

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

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

由于过滤步骤,不再需要维护单独的模式列表.

点赞