如何使用pandas合并两个CSV文件并按Dept列分组排序去重
问题根因
pd.merge()是横向关联合并函数,作用是按共同列匹配两个表的行做SQL式join,和你需要的「上下堆叠两个表的行」的需求完全不匹配,这是结果不符合预期的核心原因。
实现方案
按以下逻辑处理即可得到目标结果:
- 读入两个CSV文件
- 分别删除两个表中不需要的
Company列 - 纵向拼接两个表的所有行
- 清除两个表中重复出现的相同人员记录
- 按
Dept列分组排序后导出文件
可直接运行的代码
import pandas as pd csvPath1 = 'data1.csv' csvPath2 = 'data2.csv' csvDest = 'newdata.csv' # 读取文件 df1 = pd.read_csv(csvPath1) df2 = pd.read_csv(csvPath2) # 删除Company列 df1 = df1.drop('Company', axis=1) df2 = df2.drop('Company', axis=1) # 纵向拼接+去重 merged = pd.concat([df1, df2], ignore_index=True).drop_duplicates() # 按Dept排序,默认按字母序排列分组 merged = merged.sort_values(by='Dept', ignore_index=True) # 导出文件 merged.to_csv(csvDest, index=False)
补充说明:
- 如果读取CSV时发现列名前后带多余空格导致drop列报错,可以在读入后先统一处理列名:
df1.columns = df1.columns.str.strip() df2.columns = df2.columns.str.strip()
- 如果需要和你示例中给出的分组顺序完全一致(candy→wood→clothes→warehouse→kitchen),可以替换排序部分的代码,自定义分组优先级:
dept_order = ['candy', 'wood', 'clothes', 'warehouse', 'kitchen'] merged['Dept'] = pd.Categorical(merged['Dept'], categories=dept_order, ordered=True) merged = merged.sort_values(by='Dept', ignore_index=True)
内容的提问来源于stack exchange,提问作者noobCoder
相关产品推荐
相关产品推荐

