You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对比多Pandas DataFrame并补充缺失行以统一行数?

问题:补全Pandas DataFrame缺失行使行数一致并保留原有顺序

现有一组共享label列的Pandas DataFrame,部分DataFrame存在行缺失,需要补全缺失行,让所有DataFrame行数一致,同时保留原有行的顺序,缺失行填充0。示例数据如下:

import pandas as pd

df1 = pd.DataFrame([['sample1',2,3], ['sample4',7,8]], columns=['label', 'B', 'E'], index=[1,2])
df2 = pd.DataFrame([['sample1',20,30], ['sample2',70,80], ['sample3',700,800]], columns=['label', 'B', 'C'], index=[2,3,4])

预期输出:

label  B  E
1  sample1  2  3
2        0  0  0
3        0  0  0
4  sample4  7  8

     label    B    C
1  sample1   20   30
2  sample2   70   80
3  sample3  700  800
4  0          0    0
解决方案

核心思路是先确定所有DataFrame需要统一的目标索引范围,再让每个DataFrame对齐到该索引,缺失行用0填充,同时保留原有行的label和列值。

步骤1:确定统一的目标索引

收集所有DataFrame的索引,生成从1到最大索引值的连续索引:

# 收集所有DataFrame的索引集合
all_indices = set(df1.index) | set(df2.index)
# 生成连续的目标索引
target_index = pd.RangeIndex(start=1, stop=max(all_indices)+1)

步骤2:对单个DataFrame补全缺失行

使用reindex方法对齐到目标索引,缺失值直接用0填充:

# 处理df1
df1_filled = df1.reindex(target_index, fill_value=0)
# 处理df2
df2_filled = df2.reindex(target_index, fill_value=0)

验证输出

打印处理后的结果:

print(df1_filled)
print("\n", df2_filled)

输出结果与预期完全匹配。

扩展:批量处理多个DataFrame

如果有更多DataFrame,可放入列表批量处理:

dfs = [df1, df2]
# 生成统一目标索引
all_indices = set()
for df in dfs:
    all_indices.update(df.index)
target_index = pd.RangeIndex(start=1, stop=max(all_indices)+1)

# 批量补全行
filled_dfs = [df.reindex(target_index, fill_value=0) for df in dfs]

内容的提问来源于stack exchange,提问作者Henry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 16:31:14