python - 如何根据列的值获取另一个dataframe的值并设置到相应的字段

标签 python pandas

这是我的两个数据框,

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/

相关文章:

python - 如何在 Python 中读取间隔中的行?

python - 将图像从 float32 转换为 uint8 时,蒙版对象消失

python - 在 Pandas 数据框中将单元格拆分为多行

python - 合并 pandas groupBy 对象

python pandas read_excel 在 describe() 上返回 UnicodeDecodeError

python - 自动为每个文件夹创建数据框

python - 在 Python 中打开 mha 图像文件(2015 brats 挑战数据集)

python - 如何从空格中删除 Python "-"并将它们保留在单词之间?

python - 根据条件从现有数据框创建新数据框

python - Pandas.read_excel 有时会错误地将 bool 值读取为 1's/0' s