Python-Polars中Group By后如何拼接去重字符串?
在Polars DataFrame分组时拼接并去重列字符串值的方法
要实现分组后对指定列的字符串进行去重拼接,直接使用Polars内置的str.concat_distinct()聚合函数即可,它会自动完成分组内的去重与拼接操作。
完整实现代码
import polars as pl # 构造示例DataFrame df = pl.DataFrame( { "col1": ["a", "b", "a", "b", "c"], "col2": ["val1", "val2", "val1", "val3", "val3"] } ) # 分组聚合:对col2去重后拼接 result_df = df.group_by("col1").agg( pl.col("col2").str.concat_distinct(separator=",").alias("col2_g") ) print(result_df)
输出结果
shape: (3, 2) ┌──────┬───────────┐ │ col1 ┆ col2_g │ │ --- ┆ --- │ │ str ┆ str │ ╞══════╪═══════════╡ │ a ┆ val1 │ │ b ┆ val2,val3 │ │ c ┆ val3 │ └──────┴───────────┘
关键逻辑说明
group_by("col1"):按col1列的值进行分组pl.col("col2").str.concat_distinct(separator=","):针对每组的col2列,先自动去重重复的字符串值,再用指定分隔符(此处为逗号)拼接成单个字符串.alias("col2_g"):为聚合后的列重命名,提升结果可读性
扩展:带排序的去重拼接
如果需要对去重后的字符串先排序再拼接,可以结合unique()和str.concat()实现:
result_df = df.group_by("col1").agg( pl.col("col2").unique().sort().str.concat(separator=",").alias("col2_g") )
这种写法适合需要控制拼接顺序的场景,输出结果会保持排序后的字符串顺序。
内容的提问来源于stack exchange,提问作者Ouakrat
相关产品推荐
相关产品推荐

