Python Pandas:基于条件快速分类唯一行组合的优化方案
高效实现方案
以下几种方法均基于底层优化的聚合逻辑,处理32000行数据仅需几秒,完全解决性能问题:
1. Python Pandas(推荐,大数据集首选)
Pandas的分组聚合依赖C扩展实现,比纯Python循环效率高几个数量级:
import pandas as pd # 读取数据集(示例为CSV,可替换为Excel、数据库等来源) df = pd.read_csv("your_data.csv") # 分组并合并Location result = df.groupby(["Date", "Visitor", "Car Name"])["Location"].agg(lambda x: " & ".join(x)).reset_index() # 保存结果 result.to_csv("output.csv", index=False)
如果组内有重复Location需要去重,把lambda x改成lambda x: " & ".join(pd.unique(x))即可。
2. SQL(数据存数据库时用)
数据库引擎对聚合操作做了深度优化,直接用内置字符串聚合函数即可:
MySQL/MariaDB
SELECT Date, Visitor, `Car Name`, GROUP_CONCAT(Location SEPARATOR ' & ') AS Location FROM your_table GROUP BY Date, Visitor, `Car Name`;
去重版本:GROUP_CONCAT(DISTINCT Location SEPARATOR ' & ')
PostgreSQL
SELECT Date, Visitor, "Car Name", STRING_AGG(Location, ' & ') AS Location FROM your_table GROUP BY Date, Visitor, "Car Name";
去重版本:STRING_AGG(DISTINCT Location, ' & ')
3. Excel Power Query(非编程用户首选)
Power Query是Excel内置的高效数据处理工具,无需代码即可完成:
- 选中数据区域,点击「数据」→「从表格/区域」进入Power Query编辑器
- 点击「转换」→「分组依据」,分组列选Date、Visitor、Car Name,新列名设为
Location,操作选「所有行」 - 添加自定义列,输入公式:
Text.Combine([Location][Location], " & ") - 删除包含原始行的
Location列,将自定义列重命名为Location - 点击「关闭并上载」,结果会生成新工作表
内容的提问来源于stack exchange,提问作者trey hannam
相关产品推荐
相关产品推荐

