pandas - 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 的末尾以获得相应的值。
不过这里有两点需要注意:
我需要将 df 合并为两列。Tract (960300) 存在重复值,因此 df 需要由正确的县和正确的区域合并。
该县在两个数据框中采用不同的数字格式(一个在 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 的不同数字表示?
任何您认为有帮助的想法、代码或示例/文档链接将不胜感激。
谢谢!
解决方案
转换df1.COUNTYFP
为整数以使表示相同。023
表明该列具有string
类型。
df1.COUNTYFP = df1.COUNTYFP.astype('int')
使用在&参数df1.merge(df2, ...)
中指定列列表。left_on
right_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
推荐阅读
- assembly - 如何以 int 格式获取装配计算
- java - @refreshScope Spring 云配置不刷新 application.properties 值
- java - 为什么值在线程内不变?
- selenium - 如何在 selenium IDE 中仅选择部分断言警报?
- python - 线性回归为什么正规方程会给出巨大的误差
- html - XslCompiledTransform 结果不会正确显示在浏览器中
- ios - Swift 协议委托未在 VC 中触发
- versioning - 为什么 NW.js 大版本还是 0?
- javascript - 如何构建一个树形数组,其中/哪些项可以拼接,只允许 1、2、4、8、16 或 32 个项的数组?
- visual-studio - Visual Studio 2019 Live 单元测试崩溃