我正在尝试创建一个代码,该代码可以根据 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)))

慕莱坞森
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
添加回答
举报
0/150
提交
取消