我有2个如下的pandas数据框
df1:-
col1 col2 col3
aa b c
aa d c
bb d t
bb b g
cc e c
dd g c
和第二个数据帧:-
col1 col2
aa b
cc e
bb d
我想将dataframe1的col3值更改为“ cc”。像下面一样。基于第二个数据框列col1和col2。
col1 col2 col3
aa b cc
aa d c
bb d cc
bb b g
cc e cc
dd g c
简而言之,我想将第2个数据帧的列(col1,col2)与第1个数据帧的列(col1,col2)映射,并在匹配的第1个数据帧的列(col3)处进行映射。
答案 0 :(得分:1)
将DataFrame.merge
与左连接和指标参数一起用于帮助程序列,将==
的{{3}}与both
和Series.eq
中的最后设置值进行比较:< / p>
m = df1.merge(df2, on=['col1','col2'],indicator=True, how='left')['_merge'].eq('both')
df1.loc[m, 'col3'] = 'cc'
print (df1)
col1 col2 col3
0 aa b cc
1 aa d c
2 bb d cc
3 bb b g
4 cc e cc
5 dd g c
答案 1 :(得分:0)
您可以在数据帧df2上,在pd.concat
之后使用drop_duplicates
和assign
来表示'col3'的值:
df = pd.concat([df2.assign(col3='cc'), df1]).drop_duplicates(['col1','col2']).reset_index(drop=True)
df
输出:
col1 col2 col3
0 aa b cc
1 cc e cc
2 bb d cc
3 aa d c
4 bb b g
5 dd g c