如何用Python高效处理33.8万行数据:合并重复行并生成SSS值统计列
高效处理338000行数据的分组合并方案
针对你需要合并重复行、将SSS列的唯一值转换为统计列的需求,用Pandas的矢量化操作可以高效完成,完全适配30万+行的数据量,避免低效的循环操作。
步骤说明与代码实现
首先确保你已经安装了Pandas:
pip install pandas
然后执行以下代码:
import pandas as pd # 读取数据(假设是空格分隔的文本/CSV,根据实际格式调整sep参数) df = pd.read_csv("your_input_data.csv", sep="\s+") # 核心操作:分组统计+转宽表 # 按aaa/bbb/ccc/SSS分组统计出现次数,再将SSS的唯一值转为列,缺失值填充0 result_df = df.groupby(["aaa", "bbb", "ccc", "SSS"]).size().unstack(fill_value=0).reset_index() # 保存结果(同样按空格分隔,可按需调整sep) result_df.to_csv("your_output_data.csv", sep=" ", index=False)
代码解释
groupby(["aaa", "bbb", "ccc", "SSS"]).size():按前三个列和SSS列分组,统计每组的行数(即该SSS值在当前aaa/bbb/ccc组合中出现的次数)。这一步是Pandas中效率极高的矢量化操作,比循环快几个数量级。.unstack(fill_value=0):将SSS列的唯一值转换为新的列,原来的分组计数对应填充到新列中,没有出现的SSS值用0填充。.reset_index():把作为索引的aaa/bbb/ccc重新转为普通列,和期望的输出格式一致。
效果验证
用你提供的示例数据测试,执行后得到的结果完全符合预期:
| aaa | bbb | ccc | S1 | S2 | S3 | S4 |
|---|---|---|---|---|---|---|
| 1 | mmm | 1 | 0 | 0 | 1 | |
| 2 | kkk | aa | 0 | 0 | 1 | 0 |
| 3 | bbb | ee | 1 | 1 | 0 | 1 |
| 4 | xxx | tt | 0 | 0 | 1 | 0 |
性能优化提示
如果你的数据量接近内存上限,可以尝试以下优化:
- 读取数据时指定列类型,比如
dtype={"aaa": int, "bbb": str, "ccc": str, "SSS": str},减少内存占用。 - 若不需要保留原数据,可在处理过程中释放内存:
del df后执行gc.collect()。
内容的提问来源于stack exchange,提问作者Nirmine
相关产品推荐
相关产品推荐

