首页 > 解决方案 > 在 Python 中比较 DataFrame 和合并列之间的值

问题描述

我有两个 pandas DataFrame,其中第一个 DataFrame 有两列:“a”和“id”,第二个 DataFrame 有两列:“id”和“color_value”。我想比较两个 DataFrame 之间的 id,如果匹配,则在第一个 DataFrame 中添加一个具有正确 color_value 的列。本质上,我使用第二个 DataFrame 作为查找表来查找正确的 ID 并将其与其对应的颜色值匹配。

见下文。

df_1 = pd.DataFrame({'a': [1, 2, 3, 4, 5], 'id': ['001', '002', '001', '004', '003']})
df_2 = pd.DataFrame({'id': ['001', '002', '003', '004'], 'color_value': ['blue', 'red', 'yellow', 'orange']})

so df1:
a  id
1  001
2  002
3  001
4  004
5  003

df2:
id   color_value
001  blue
002  red
003  yellow
004  orange

I need a way to match up the IDs from df1 and df2 and add the color_value column to df1, so the result is:

df1:
a  id   color_value
1  001   blue
2  002   red
3  001   blue
4  004   orange
5  003   yellow

标签: pythonpandasdataframe

解决方案


您可以通过设置df_2with idas index using .set_index()(作为映射的键) 并获取color_value列 (作为映射的值) 来形成映射。

然后,您可以使用 映射iddf_1映射中.map(),如下所示:

df_1['color_value'] =  df_1['id'].map(df_2.set_index('id')['color_value'])

或将其分解为 2 行以获得更好的可读性/更易于理解,如下所示:

mapping = df_2.set_index('id')['color_value']
df_1['color_value'] =  df_1['id'].map(mapping)

结果:

print(df_1)

   a   id color_value
0  1  001        blue
1  2  002         red
2  3  001        blue
3  4  004      orange
4  5  003      yellow

推荐阅读