Python 如何基于键从其他数据帧中提取值并设置为当前数据帧

Python 如何基于键从其他数据帧中提取值并设置为当前数据帧,python,pandas,Python,Pandas,我有两个专栏 df1 = pd.DataFrame([['A','h1',None],['B','h2',None],['C','h3',None]],columns=['id','HH','VV']) id HH VV 0 A h1 None 1 B h2 None 2 C h3 None df2 = pd.DataFrame([['A','XX',10],['B','XX',15],['B','YY',15],['A','ZZ',10],['C','GG',

我有两个专栏

df1 = pd.DataFrame([['A','h1',None],['B','h2',None],['C','h3',None]],columns=['id','HH','VV'])

  id  HH    VV
0  A  h1  None
1  B  h2  None
2  C  h3  None

df2 = pd.DataFrame([['A','XX',10],['B','XX',15],['B','YY',15],['A','ZZ',10],['C','GG',28]],columns=['id','NO','VV'])
  id  NO  VV
0  A  XX  10
1  B  XX  15
2  B  YY  15
3  A  ZZ  10
4  C  GG  28
在df2中,如果它们具有相同的id,“VV”的值相同

我想设置df1的VV值,根据df1的id值搜索到df2,答案如下

  id  HH    VV
0  A  h1    10
1  B  h2    15
2  C  h3    28
我想我应该用

keys = ['id']
df1.assign(VV=df1[keys].join(df2.set_index(keys).VV, on=keys).VV)

但如果id在df2中是唯一的,它就可以工作。您可以在
键的
列中首先删除重复项:

keys = ['id']
a = df1.assign(VV=df1[keys].join(df2.drop_duplicates(keys).set_index(keys).VV, on=keys).VV)
print (a)
  id  HH  VV
0  A  h1  10
1  B  h2  15
2  C  h3  28

所以可能有其他的方法,但我会合并这两个数据帧

new_df= pd.merge(df1,df2, on='id)
然后删除列NO

new_df = new_df.drop('NO', axis=1)
也许还有其他更优雅的方法


干杯

谢谢你的回答,这是一个很好的方法。