如何对比多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
相关产品推荐
相关产品推荐

