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

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


德玛西亚99
浏览 235回答 2
2回答

料青山看我应如是

您可以通过构造单个 NumPy 数组np.vstack,然后分配给多个列:import numpy as npmask = df['id'].isin(id_list)value_array = np.vstack((value1_list, value2_list)).Tdf.loc[mask, ['value1', 'value2']] = value_arrayprint(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)))

慕莱坞森

您还可以使用字典输入与其更新相对应的列。mask = df['id'].isin(id_list)dc = {'value1': value1_list, 'value2': value2_list}for i, j in dc.items():    df.loc[mask, i] = j
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python