合并行列数不等的Pandas Dataframes技术方案问询
合并行列数不等的Pandas DataFrame解决方案
实现步骤
要满足你的需求,我们可以通过外连接+缺失值填充的方式完成,具体代码如下:
import pandas as pd # 构建示例数据 df1 = pd.DataFrame({ 'code': [1,1,1,2,2,2], 'item': ['i1','i2','i3','i1','i2','i3'], 'size': [50]*6, '2020': [303,763,111,998,345,777], '2021': [343,555,935,222,345,112], '2022': [432,988,711,533,222,419], '2023': [855,499,621,629,908,492], '2024': [431,691,951,853,127,290] }) df2 = pd.DataFrame({ 'code': [1,1,2,2,3], 'item': ['i1','i4','i3','i5','i1'], 'size': [50]*5, '2025': [303,763,435,777,653], '2026': [343,555,111,112,199] }) # 1. 基于code、item、size做外连接,保留所有行 merged_df = pd.merge(df1, df2, on=['code', 'item', 'size'], how='outer') # 2. 将缺失的年份值填充为0 merged_df = merged_df.fillna(0) # 3. 调整列顺序,匹配期望输出 column_order = ['code', 'item', 'size', '2020', '2021', '2022', '2023', '2024', '2025', '2026'] merged_df = merged_df[column_order] # 4. 将数值列转为整数(可选,贴合示例格式) merged_df[merged_df.columns[3:]] = merged_df[merged_df.columns[3:]].astype(int) print(merged_df)
代码说明
- 外连接:
how='outer'确保两个DataFrame中所有code+item+size的组合都被保留,不会丢失任何一行数据。 - 缺失值填充:外连接后不存在的年份数据会生成NaN,用
fillna(0)将这些值替换为0,符合需求中的填充规则。 - 列序调整:通过指定
column_order重新排列列,让输出结构和你期望的一致。 - 类型转换:将年份列转为整数,避免填充0后出现浮点数格式。
输出结果
运行代码后,输出将完全匹配你提供的期望结果:
code item size 2020 2021 2022 2023 2024 2025 2026 0 1 i1 50 303 343 432 855 431 303 343 1 1 i2 50 763 555 988 499 691 0 0 2 1 i3 50 111 935 711 621 951 0 0 3 1 i4 50 0 0 0 0 0 763 555 4 2 i1 50 998 222 533 629 853 0 0 5 2 i2 50 345 345 222 908 127 0 0 6 2 i3 50 777 112 419 492 290 435 111 7 2 i5 50 0 0 0 0 0 777 112 8 3 i1 50 0 0 0 0 0 653 199
内容的提问来源于stack exchange,提问作者ldhwaddell
相关产品推荐
相关产品推荐

