将值从另一个数据帧替换为数据帧列



我正试图用基于第三列的另一列的值替换数据帧列中的值,并保留第一个df中的其余值。

# df1
country   name   value
romania   john   100
russia    emma   200
sua       mark   300
china     jack   400
# df2
name   value
emma   2
mark   3

期望结果:

# df3
country   name   value
romania   john   100
russia    emma   2
sua       mark   3
china     jack   400

谢谢

一种方法如下:

  • 在列name上使用Series.map,并通过将df2的索引设置为name(df.set_index(将其转换为一个系列进行映射
  • 接下来,链Series.fillna以将NaN值替换为来自df.value的原始值(即,每当映射没有导致匹配时(,并分配给df['value']
df['value'] = df['name'].map(df2.set_index('name')['value']).fillna(df['value'])
print(df)
country  name  value
0  romania  john  100.0
1   russia  emma    2.0
2      sua  mark    3.0
3    china  jack  400.0

注意:结果现在将包含浮点值。如果您喜欢integers,也可以链.astype(int)

另一个选项可能是使用panda。DataFrame.更新:

df1.set_index('name', inplace=True)
df1.update(df2.set_index('name'))
df1.reset_index(inplace=True)
name  country  value
0  john  romania  100.0
1  emma   russia    2.0
2  mark      sua    3.0
3  jack    china  400.0

另一个选项:

df3          = df1.merge(df2, on = 'name', how = 'left')
df3['value'] = df3.value_y.fillna(df3.value_x) 
df3.drop(['value_x', 'value_y'], axis = 1, inplace = True)
#    country  name  value
# 0  romania  john  100.0
# 1   russia  emma    2.0
# 2      sua  mark    3.0
# 3    china  jack  400.0

可再现数据:

df1=pd.DataFrame({'country':['romania','russia','sua','china'],'name':['john','emma','mark','jack'],'value':[100,200,300,400]})
df2=pd.DataFrame({'name':['emma','mark'],'value':[2,3]})

最新更新