如何在Pandas中合并近似重复行以缩减数据行数?
问题描述
我有一个Pandas DataFrame,其中部分行包含近似重复的值,希望合并这些行来减少数据行数。
示例输入DataFrame
| One | Two | Three |
|---|---|---|
| A | B | C |
| B | B | B |
| C | A | B |
期望输出DataFrame
| One | Two | Three |
|---|---|---|
| ABC | AB | CB |
实际业务样本CSV数据
Column_1,Column_2,Column_3,Column_4,Column_5,Column_6,Column_7,Column_8 A,A,A,A,A,A,A,A A,A,A,A,A,A,A,B A,A,A,A,A,A,A,C A,A,A,A,A,A,B,A A,A,A,A,A,A,B,B A,A,A,A,A,A,B,C A,A,A,A,A,A,C,A A,A,A,A,A,A,C,B A,A,A,A,A,A,C,C C,C,C,C,C,C,A,A C,C,C,C,C,C,A,B C,C,C,C,C,C,A,C C,C,C,C,C,C,B,A C,C,C,C,C,C,B,B C,C,C,C,C,C,B,C C,C,C,C,C,C,C,A C,C,C,C,C,C,C,B C,C,C,C,C,C,C,C
期望输出CSV格式
Column_1,Column_2,Column_3,Column_4,Column_5,Column_6,Column_7,Column_8 AC,AC,AC,AC,AC,AC,ABC,ABC
之前写的代码太冗长,想要更简洁自然的解决方案。
简洁解决方案
核心思路是对每一列提取唯一值,排序后拼接成字符串,用Pandas的agg方法可高效实现:
import pandas as pd # 读取CSV数据 df = pd.read_csv("your_file.csv") # 对每一列聚合:取唯一值→排序→拼接成字符串 result = df.agg(lambda col: ''.join(sorted(col.unique()))).to_frame().T # 输出为CSV result.to_csv("output.csv", index=False)
代码说明
col.unique():提取当前列的所有唯一值,自动去重sorted():对唯一值按字母顺序排序,保证输出结果的一致性''.join():将排序后的唯一值拼接成连续字符串agg(lambda col: ...):对DataFrame的每一列批量应用上述逻辑to_frame().T:将聚合得到的Series转换为行格式的DataFrame,匹配期望输出结构
该方法无需逐列编写冗余代码,适配任意列数和行数的数据集,执行效率高。
内容的提问来源于stack exchange,提问作者OldSport
相关产品推荐
相关产品推荐

