python – 在列名称中循环
发布时间:2020-12-20 11:07:49 所属栏目: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']
我有一个数据框,其中包含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) 由于过滤步骤,不再需要维护单独的模式列表. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |