为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas:根据单独列的值更新多列和多行

Pandas:根据单独列的值更新多列和多行

德玛西亚99 2021-10-10 15:24:50
我正在尝试创建一个代码,该代码可以根据 ID 列的值尽可能快地同时更新大量 Pandas 值。我使用 atm 的代码基于 ID_column 同时插入多行,但不能同时插入多列 + 行。下面的代码是一个简单的例子,它根据列名 ID 的值更新 2 列(value1 和 value2)。id_list = [24,26,28] value1_list  =[100,200,300]value2_list  =[125,175,165]df.loc[df['id'].isin(id_list), 'value1'] = value1_list df.loc[df['id'].isin(id_list), 'value2'] = value2_list 我理想情况下会使用的代码会像这样工作:df.loc[df['id'].isin(id_list), ['value1','value2']] = [value1_list,value2_list]这意味着将同时更新列 value1 和 column value2 这是否可行?
查看完整描述

2 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

您可以通过构造单个 NumPy 数组np.vstack,然后分配给多个列:


import numpy as np


mask = df['id'].isin(id_list)

value_array = np.vstack((value1_list, value2_list)).T

df.loc[mask, ['value1', 'value2']] = value_array


print(df)

#    id  value1  value2

# 0  24     100     125

# 1  26     200     175

# 2  28     300     165

# 3  30       4       8

或者,您可以zip输入列表:


df.loc[mask, ['value1', 'value2']] = list(zip(*(value1_list,value2_list)))


查看完整回答
反对 回复 2021-10-10
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

您还可以使用字典输入与其更新相对应的列。


mask = df['id'].isin(id_list)


dc = {'value1': value1_list, 'value2': value2_list}

for i, j in dc.items():

    df.loc[mask, i] = j


查看完整回答
反对 回复 2021-10-10
  • 2 回答
  • 0 关注
  • 234 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号