我有一个主要的df
,其中有一列我想用第二个df1
的值进行更新。
对我来说,棘手的部分是我需要对每个df的2个公共列进行匹配,才能知道要更新哪个值。
使用示例:
df col1 col2 col3
1 1A Z4 4
2 1B Z5 2
3 1C Z6 7
4 1D Z7 1
5 1E Z12 9
df1 col1 col2 col3
1 1G Z9 1
2 1B Z5 2
3 1C Z6 3
4 1D Z7 4
5 1E Z8 5
输出:
df col1 col2 col3
1 1A Z4 4 (no match, no update)
2 1B Z5 2 (match, updated)
3 1C Z6 3 (match, updated)
4 1D Z7 4 (match, updated)
5 1E Z12 9 (not matched on both, no update)
谢谢您的帮助。
答案 0 :(得分:2)
您可以将set_index
与update
一起使用
df1=df1.set_index(['col1','col2'])
df1.update(df2.set_index(['col1','col2']))
df1.reset_index(inplace=True)
df1
Out[528]:
col1 col2 col3
0 1A Z4 4.0
1 1B Z5 2.0
2 1C Z6 3.0
3 1D Z7 4.0
4 1E Z12 9.0
答案 1 :(得分:0)
通过使用numpy.where
以及我从@jezrael的解决方案中找到的三元运算符。
df['col3'] = np.where(df['col1'].isin(df1['col1']) & df['col2'].isin(df1['col2']), df1['col3'], df['col3'])