Pandas Groupby聚合拼接字符串时如何保留原有顺序并去重?
解决方案
你现有实现使用set去重导致顺序丢失,核心原因是set结构本身不保留元素插入顺序。要保留预先排序后的先后顺序同时去重,直接用Pandas Series自带的drop_duplicates()方法即可,该方法默认保留元素第一次出现的位置,完全匹配你排序后的顺序需求。
修改后的完整代码如下:
import numpy as np import pandas as pd df = df.sort_values( ['id', 'order_column'] ).groupby('id').agg( { 'channel': lambda x: ' > '.join(x.drop_duplicates()), 'value': np.sum } )
如果你使用的Pandas版本低于1.1.0,也可以依托Python 3.7+原生支持的有序字典特性实现,写法如下:
'channel': lambda x: ' > '.join(dict.fromkeys(x).keys())
以上两种写法都可以输出你期望的结果:Email > Affiliate > Organic Search > Branded Social > Direct
内容的提问来源于stack exchange,提问作者ZeroStack
相关产品推荐
相关产品推荐

