pandas groupby聚合拼接字符串时如何去除重复值
问题场景
使用pandas处理Excel数据时,按指定列分组后对文本列做拼接聚合,原始代码如下:
keep_the_same = ["foo", "bar"] ones_to_sort = ["somethingelse", "something"] out = df.groupby(keep_the_same)[ones_to_sort].agg(",".join).reset_index()
因原始数据不规范,聚合后的单元格存在重复内容,需要实现去重后再合并的效果。
对应问题示例:


实现方法
不需要改动原有分组逻辑,只需要把原来直接传字符串拼接的聚合逻辑,替换成先去重再拼接的自定义逻辑即可,代码改动极小:
keep_the_same = ["foo", "bar"] ones_to_sort = ["somethingelse", "something"] # 聚合时先对分组内的序列去重,再用中文逗号拼接 out = df.groupby(keep_the_same)[ones_to_sort].agg( lambda col: ",".join(col.drop_duplicates()) ).reset_index()
如果原始数据里有空值/空字符串,不想把这些无效值拼到结果里,可以在去重前加一步过滤:
lambda col: ",".join(col.dropna().drop_duplicates())
如果觉得lambda表达式可读性差,也可以单独定义拼接函数传入:
def dedup_merge(col): # 过滤空值、去重后按原顺序拼接 valid_items = col.dropna().drop_duplicates() return ",".join(valid_items) out = df.groupby(keep_the_same)[ones_to_sort].agg(dedup_merge).reset_index()
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

