如何使用Pandas合并列、行均存在差异的多个DataFrame
Pandas多DataFrame按公共字段合并解决方案
核心思路
- 以
Bridge_No、Location、Area三个公共字段作为连接主键 - 采用外连接模式,保留三个表所有记录,缺失的年份字段值自动填充为NaN
- 年份数值各自单独作为一列输出
完整实现代码
import pandas as pd from functools import reduce # 构造2011年数据 df_2011 = pd.DataFrame([ [1, 'NY', 10, 3], [2, 'FL', 20, 4], [3, 'NJ', 15, 6] ], columns=['Bridge_No', 'Location', 'Area', '2011']) # 构造2012年数据 df_2012 = pd.DataFrame([ [2, 'FL', 20, 5], [3, 'NJ', 15, 3], [4, 'CN', 45, 9] ], columns=['Bridge_No', 'Location', 'Area', '2012']) # 构造2013年数据 df_2013 = pd.DataFrame([ [2, 'FL', 20, 8], [6, 'MI', 30, 8], [4, 'CN', 45, 9] ], columns=['Bridge_No', 'Location', 'Area', '2013']) # 批量合并所有表,表数量多时也适用 dfs = [df_2011, df_2012, df_2013] final_df = reduce(lambda left, right: pd.merge(left, right, on=['Bridge_No', 'Location', 'Area'], how='outer'), dfs) # 打印验证结果 print(final_df)
输出结果说明
最终合并后的数据集格式如下,完全满足需求:
| Bridge_No | Location | Area | 2011 | 2012 | 2013 |
|---|---|---|---|---|---|
| 1 | NY | 10 | 3.0 | NaN | NaN |
| 2 | FL | 20 | 4.0 | 5.0 | 8.0 |
| 3 | NJ | 15 | 6.0 | 3.0 | NaN |
| 4 | CN | 45 | NaN | 9.0 | 9.0 |
| 6 | MI | 30 | NaN | NaN | 8.0 |
内容的提问来源于stack exchange,提问作者Venkata Praveen Naradasu
相关产品推荐
相关产品推荐

