[英]How set value in column according to another dataframe column's value
[英]How to get another dataframe value according to the value of the column and set to the corresponding field
这是我的两个数据框,
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
选择key1 + key2在df2中的df1的行
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
同时保持其他列不变。 您可以就地update
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)
或者您可以使用fillna
df2.set_index(['key1','key2']).value.fillna(df1.set_index(['key1','key2']).value).\
reset_index()
Out[84]:
key1 key2 value
0 @5 B 1
1 @7 B 3
2 @6 B 3
3 @3 A 4
4 @6 B 3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.