加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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)

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读