首页 > 解决方案 > Pandas 基于两列合并 DataFrame

问题描述

我有两个 DataFrames 我试图合并以创建一个等值线图。每个数据帧的一小部分如下所示:

数据框 1:

    COUNTYFP   TRACTCE
7   023        960100
8   023        960200
9   023        960300
52  024        960300
5   024        960402
4   031        960403
3   031        960404
6   031        960405

数据框 2:

      county    tract     percent
1640    23      960100    16.3562
1643    23      960200    15.6140
1646    23      960300    25.7558
1649    24      960300    40.3279
1652    24      960402    37.9966
1655    31      960403    34.1127
1658    31      960404    26.5466
1661    31      960405    29.2962

我在这里尝试做的是合并这两个 DataFrame,以便将来自 DF2 的百分比列添加到 DF1 的末尾以获得相应的值。

不过这里有两点需要注意:

  1. 我需要将 df 合并为两列。Tract (960300) 存在重复值,因此 df 需要由正确的县和正确的区域合并。

  2. 该县在两个数据框中采用不同的数字格式(一个在 023 中,另一个在 23 中)。

所需的输出:

COUNTYFP   TRACTCE   percent
7   023    960100    16.3562
8   023    960200    15.6140
9   023    960300    ...
52  024    960300    ...
5   024    960402    ...
4   031    960403    ...
3   031    960404    ...
6   031    960405    ...

我不能只是合并它,tract因为 960300 出现了两次。同样,我不能将其合并county为 23 多次出现。因此,我需要使用两个不同的列来组合每一个。我有点不确定如何做到这一点。

我的想法是这样的:

merged_df = df1.set_index(['COUNTYFP', 'TRACTCE']).join(df2.set_index(['county', 'tract']))

我不确定这是否可行。这是正确的方法吗?另外,我如何处理两个 dfs 中县值 023 和 23 的不同数字表示?

任何您认为有帮助的想法、代码或示例/文档链接将不胜感激。

谢谢!

标签: pandasdataframemerge

解决方案


转换df1.COUNTYFP为整数以使表示相同。023表明该列具有string类型。

df1.COUNTYFP = df1.COUNTYFP.astype('int')

使用在&参数df1.merge(df2, ...)中指定列列表。left_onright_on

df1.merge(df2, left_on=['COUNTYFP', 'TRACTCE'], right_on=['county', 'tract'], how='left')

# outputs:

      county   tract  percent
1640      23  960100  16.3562
1643      23  960200  15.6140
1646      23  960300  25.7558
1649      24  960300  40.3279
1652      24  960402  37.9966
1655      31  960403  34.1127
1658      31  960404  26.5466
1661      31  960405  29.2962

推荐阅读