You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas 1.3.4聚合时布尔列被转为float64,如何保留原类型?

问题答复

1. 该行为是否为pandas 1.3.4的预期设计

是的,该类型转换是pandas 1.3版本迭代中的有意调整。1.3版本之前,布尔列计算中位数时会直接基于布尔底层的整数存储规则(True=1、False=0)计算,结果如果刚好是整数值会保留布尔类型;1.3版本为了统一不同数据类型的数值统计逻辑,所有非浮点型列计算中位数时都会先统一转换为float64类型再做计算,因此布尔列的计算结果会以1.0/0.0的浮点形式输出,属于版本设计的预期行为。

2. 聚合时直接保留布尔列原始类型的方法

你可以通过为不同列指定差异化聚合规则的方式,在聚合阶段直接完成类型保留,不需要事后手动转换,常用方案如下:

方案1:针对确定分组内布尔值完全一致的场景

如果同分组下bool_col的取值全部相同(和你的示例场景一致),直接取分组内任意一个布尔值即可,性能最优:

df_genes = df.groupby("gene").agg(
    bool_col=("bool_col", "first"),
    S2=("S2", "median")
)

方案2:针对分组内布尔值可能不同、仍需取中位数对应布尔结果的场景

如果需要严格基于中位数的计算结果转回布尔类型,可以在布尔列的聚合函数中加入类型转换逻辑:

df_genes = df.groupby("gene").agg(
    bool_col=("bool_col", lambda x: bool(x.median())),
    S2=("S2", "median")
)

注意:如果分组内True和False的数量相等,中位数计算结果为0.5,转换为布尔值时会得到True,需要根据你的业务需求调整该场景下的判断逻辑,比如可以替换为lambda x: x.sum() >= len(x)/2自定义判断规则。

内容的提问来源于stack exchange,提问作者MaW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:54:01