这是我的两个数据框,
df1 = pd.DataFrame([['@1','A',2],['@2','A',1],['@3','A',4],['@4','B',1],['@5','B',1],['@6','B',3],['@7','B',3],['@8','C',4]],columns=['key1','key2','value'])
key1 key2 value
0 @1 A 2
1 @2 A 1
2 @3 A 4
3 @4 B 1
4 @5 B 1
5 @6 B 3
6 @7 B 3
7 @8 C 4
df2 = pd.DataFrame([['@5','B',None],['@7','B',None],['@6','B',None],['@3','A',None],['@6','B',None]],columns=['key1','key2','value'])
key1 key2 value
0 @5 B None
1 @7 B None
2 @6 B None
3 @3 A None
4 @6 B None
我知道我可以使用 isin
来选择 df1 中 key1+key2 在 df2 中的行
df1[(df1['key1']+df1['key2']).isin(df2['key1']+df2['key2'])]
key1 key2 value
2 @3 A 4
4 @5 B 1
5 @6 B 3
6 @7 B 3
但是我怎样才能将 df1 的 ['value'] 分配给 df2 ,这样 df2 就是
key1 key2 value
0 @5 B 1
1 @7 B 3
2 @6 B 3
3 @3 A 4
4 @6 B 3
最佳答案
使用pd.DataFrame.merge
df2[['key1', 'key2']].merge(df1, 'left')
key1 key2 value
0 @5 B 1
1 @7 B 3
2 @6 B 3
3 @3 A 4
4 @6 B 3
或者用pd.DataFrame.join
keys = ['key1', 'key2']
df2[keys].join(df1.set_index(keys).value, on=keys)
key1 key2 value
0 @5 B 1
1 @7 B 3
2 @6 B 3
3 @3 A 4
4 @6 B 3
假设您要更新 df2
而保持其他列不变。您可以就地更新
keys = ['key1', 'key2']
df2.update(df2[keys].join(df1.set_index(keys).value, on=keys).value)
或者创建一个副本
keys = ['key1', 'key2']
df2.assign(value=df2[keys].join(df1.set_index(keys).value, on=keys).value)
关于python - 如何根据列的值获取另一个dataframe的值并设置到相应的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47148852/