![](/img/trans.png)
[英]Combine multiple rows based on one colum value and add extra columns based on other column value in Pandas
[英]Pandas: Updating multiple columns and rows based on the value of a seperate column
我正在尝试创建一个代码,该代码可以根据ID列的值尽快更新大量的熊猫值。 我正在使用atm的代码在一个ID_column的基础上同时插入多行,但无法同时插入多列+行。
下面的代码是一个简化示例,该示例根据列名ID的值更新2列(值1和值2)。
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将同时更新。这可行吗?
您可以通过np.vstack
构造一个NumPy数组,然后分配给多列:
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)))
您也可以使用字典输入与更新对应的列。
mask = df['id'].isin(id_list)
dc = {'value1': value1_list, 'value2': value2_list}
for i, j in dc.items():
df.loc[mask, i] = j
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.