Polars 0.18.0后如何按列分组生成唯一值列表列?
解决Polars 0.18.0+中按类型生成唯一宝可梦名称列表的问题
在Polars 0.18.0版本后,原用于聚合为列表的.list()方法已被重构为.implode(),你只需将原代码中的.list()替换为.implode()即可复现原有逻辑,同时确保操作顺序匹配分组内去重再聚合的需求:
正确写法
df.with_columns(lst_of_pokemon = pl.col('name').unique().implode().over('Type 1'))
逻辑说明
.over('Type 1')指定按「Type 1」列分组的窗口范围.unique()在每个窗口(即单个宝可梦类型组)内对「name」列去重.implode()将窗口内去重后的名称聚合为列表
备选写法
如果需要先聚合组内所有名称再去重,也可以使用列表的去重方法:
df.with_columns(lst_of_pokemon = pl.col('name').implode().over('Type 1').list.unique())
这种写法会先将组内所有名称聚合成列表,再对列表去重,最终结果与前者一致。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

