如何在Pandas DataFrame中同一行展示多个逗号分隔的匹配项
解决方案
不需要手动遍历df条目创建匹配列表,用pandas内置的分组聚合功能就能更简洁高效的实现需求,性能远高于自行循环的实现。
最简实现代码
替换你原有逻辑中的循环、赋值、去重部分,核心仅需一行分组聚合代码:
import pandas as pd data = {'some_primary_key':['unique_value_1', 'unique_value_2', 'unique_value_3']*2, 'values':['some_value_1', 'some_value_3', 'some_value_5', 'some_value_2', 'some_value_4', 'some_value_6'] } df = pd.DataFrame(data=data) # 按主键分组,对values列执行逗号拼接,自动去重主键行 result = df.groupby('some_primary_key', as_index=False)['values'].agg(','.join) print(result)
其他适配场景方案
如果你需要保留另一个仅含主键的表的所有主键(即使某个主键没有对应的values值也要保留在结果中),可以先关联再聚合:
# 你的仅含主键的表示例 df_primary = pd.DataFrame({'some_primary_key': ['unique_value_1', 'unique_value_2', 'unique_value_3']}) result = df_primary.merge(df, on='some_primary_key', how='left')\ .groupby('some_primary_key', as_index=False)['values']\ .agg(lambda x: ','.join(x.dropna()))
优势说明
- 代码更简洁,避免了手动遍历、筛选、赋值、去重的冗余逻辑
- 执行效率更高,pandas底层的分组聚合做了优化,数据量越大比手动循环的优势越明显
内容的提问来源于stack exchange,提问作者qrzep
相关产品推荐
相关产品推荐

