如何将两个CSV文件横向合并为含缺失值的Pandas DataFrame?
基于Pandas合并分组内有序的两个DataFrame
问题背景
现有两个CSV文件(或Pandas DataFrame):
file1.csv
file A 0 K0 E1 1 K0 E2 2 K0 E3 3 K1 W1 4 K2 W2
file2.csv
file B 0 K0 E3 1 K0 W3 2 K1 E4 3 K1 W4 4 K3 W5
需要将它们合并为如下结构的结果,缺失值用NA(或空白/0)填充:
file A B 0 K0 E1 E3 1 K0 E2 W3 2 K0 E3 NA 3 K1 W1 E4 4 K1 NA W4 5 K2 W2 NA 6 K3 NA W5
实现方案
核心思路是给每个分组(file列)添加组内序号,通过序号匹配同一分组内的对应行,再做外连接保留所有数据。
步骤1:导入库并加载数据
import pandas as pd # 加载CSV文件(如果是已有DataFrame可跳过此步) file1 = pd.read_csv("file1.csv") file2 = pd.read_csv("file2.csv") # 或者构造示例DataFrame(用于测试) # file1 = pd.DataFrame({"file": ["K0", "K0", "K0", "K1", "K2"], "A": ["E1", "E2", "E3", "W1", "W2"]}) # file2 = pd.DataFrame({"file": ["K0", "K0", "K1", "K1", "K3"], "B": ["E3", "W3", "E4", "W4", "W5"]})
步骤2:添加组内序号
对每个file分组,生成组内的行计数序号,用于匹配同组内的对应行:
file1["group_idx"] = file1.groupby("file").cumcount() file2["group_idx"] = file2.groupby("file").cumcount()
步骤3:外连接合并
以file和group_idx为键做外连接,确保所有分组和行都被保留:
merged_df = pd.merge(file1, file2, on=["file", "group_idx"], how="outer")
步骤4:处理缺失值并整理结果
将缺失值替换为需要的内容(NA、空白或0),然后移除辅助的group_idx列并重置索引:
# 替换缺失值,可根据需求改为""(空白)或0 merged_df = merged_df.fillna("NA") # 整理最终结果 final_result = merged_df.drop("group_idx", axis=1).reset_index(drop=True)
输出结果
执行print(final_result)即可得到目标格式的DataFrame,也可以用final_result.to_csv("result.csv", index=False)保存为CSV文件。
内容的提问来源于stack exchange,提问作者Milan Jain
相关产品推荐
相关产品推荐

