在两个 pandas 数据框中查找匹配值并从匹配行返回一个值

NL2*_*des 2 python indexing concatenation pandas

很难以清晰和准确的方式表达这个问题,所以希望下面的内容有助于更多地阐明我的问题。

我有两个 pandas 数据框,对此示例进行了简化,它们是:

df1 = 
'CENSUS_ID'  
60014001001
60014002001

df2 = 
'GEO_ID'    'MED_INCOME'
60014001001   177417
60014002001   166313
60014002002   132400
60014003001   161964
Run Code Online (Sandbox Code Playgroud)

我想通过在 df2 中查找匹配的 GEO_ID 并返回“MED_INCOME”值,向 df1 添加一个名为“MED_INCOME”的列。虽然这些数据帧经过简化,但 df1 的实际 len 可能有数百行长,而 df2 的实际 len 则有数万行长。因此,虽然我可以轻松地将其设置为迭代以查找匹配项,但它并不理想,因为它非常慢。我想使用 pandas apply() 因为它似乎要快得多,或者也许还有另一种解决方案,但我很难弄清楚逻辑,因为我仍然有很多 pandas “技巧”新的或不知道的。也许从 df2 中删除不匹配的列比添加到 df1 更容易,但我只是不知道。任何帮助表示赞赏。

Joe*_*ten 5

您可以进行左合并(左外连接)。这将保留所有观察结果 in ,df1同时将其与GEO_IDin匹配df2

df1.merge(df2, left_on='CENSUS_ID', right_on='GEO_ID', how='left')
Run Code Online (Sandbox Code Playgroud)