Pandas-使用来自另一个DF的值更新/替换列中的值(基于2个匹配的列)

我有一个主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)

谢谢您的帮助。


素胚勾勒不出你
浏览 528回答 2
2回答

浮云间

你可以用set_index与updatedf1=df1.set_index(['col1','col2'])df1.update(df2.set_index(['col1','col2']))df1.reset_index(inplace=True)df1Out[528]:   col1 col2  col30   1A   Z4   4.01   1B   Z5   2.02   1C   Z6   3.03   1D   Z7   4.04   1E  Z12   9.0

呼唤远方

通过numpy.where与我从@jezrael的解决方案中找到的三元运算符一起使用。df['col3'] = np.where(df['col1'].isin(df1['col1']) & df['col2'].isin(df1['col2']), df1['col3'], df['col3'])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python