Python中Polars分组聚合时如何拼接组内字符串?
Polars分组聚合时跨行拼接字符串的正确方法
在Polars DataFrame中执行group_by分组聚合,需将每组内指定列的字符串值跨行拼接,示例DataFrame如下:
import polars as pl df = pl.DataFrame( { "col1": ["a", "b", "a", "b", "c"], "col2": ["val1", "val2", "val1", "val3", "val3"] } )
原DataFrame形态:
shape: (5, 2) ┌──────┬──────┐ │ col1 ┆ col2 │ │ --- ┆ --- │ │ str ┆ str │ ╞══════╪══════╡ │ a ┆ val1 │ │ b ┆ val2 │ │ a ┆ val1 │ │ b ┆ val3 │ │ c ┆ val3 │ └──────┴──────┘
期望通过分组聚合得到如下结果:
┌──────┬───────────┐ │ col1 ┆ col2_g │ │ --- ┆ --- │ │ str ┆ str │ ╞══════╪═══════════╡ │ a ┆ val1,val1 │ │ b ┆ val2,val3 │ │ c ┆ val3 │ └──────┴───────────┘
正确写法
对应的聚合函数是list.join,完整代码如下:
df.group_by('col1').agg( col2_g = pl.col('col2').list.join(',') )
无效方法说明
pl.col('col2').list.concat(','):list.concat用于拼接多个列表对象,而非将列表元素转为字符串拼接,参数应为列表而非分隔符pl.col('col2').join(','):join是Series级别的横向字符串拼接方法,不适用分组后的多行聚合场景- 若你执行
pl.col('col2').list.join(',')无效,大概率是Polars版本过低,建议升级到0.17.0及以上版本,该版本正式引入了list.join方法
内容的提问来源于stack exchange,提问作者HumpbackWhale194
相关产品推荐
相关产品推荐

