Polars中多值同为众数时返回null的实现需求
在Polars中获取唯一众数,无唯一众数时返回Null
Polars内置的mode()方法会返回所有出现频率最高的值,但如果存在多个频率相同的最大值(即没有唯一众数),我们可以通过自定义逻辑返回null,具体实现如下:
import polars as pl if __name__ == '__main__': df = pl.DataFrame({"a": [1, 1, 2, 3], "b": [1, 1, 2, 2]}) # 计算唯一众数,无唯一众数时返回null unique_mode = df.select( pl.when( # 判断最高频率的出现次数是否为1(即只有一个众数) pl.col("b").value_counts().select(pl.col("count").max().count()).eq(1) ) .then(pl.col("b").mode().first()) # 有唯一众数时取该值 .otherwise(None) # 无唯一众数时返回null .alias("unique_mode") ) print(unique_mode)
代码逻辑说明
pl.col("b").value_counts():统计b列每个值的出现次数,生成包含b和count的临时数据框pl.col("count").max().count():找出最高出现次数,再统计这个最高次数出现的次数——如果等于1,说明只有一个值是众数;大于1则存在多个众数- 通过
when/then/otherwise分支逻辑,对应返回唯一众数或null
测试不同场景:
- 当
b列是[1,1,2,2]时,返回null - 当
b列是[1,1,1,2,3]时,返回1 - 当
b列是[5,5,3,3,3,2]时,返回3
内容的提问来源于stack exchange,提问作者pbh
相关产品推荐
相关产品推荐

