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

如何按miR21阈值8拆分DataFrame并新增1/0标记的group列

pandas 基于列阈值新增二分类分组列最优实现

你的数据集结构参考:
数据集示例

针对你需要按miR21列阈值8新增group列(>=8赋值1,<8赋值0)的需求,性能最优、代码最简洁的实现是直接利用pandas矢量化布尔运算的特性,布尔值转整数时True会自动映射为1、False自动映射为0,完全匹配你的赋值规则,核心代码仅需1行:

df['group'] = (df['miR21'] >= 8).astype(int)

其他等价实现(非最优场景说明)

以下写法也能实现需求,但在单阈值二分类场景下没有必要,仅适合特定扩展场景:

  • 用numpy.where做条件判断:逻辑和上面完全等价,代码稍显冗余,性能基本一致
    import numpy as np
    df['group'] = np.where(df['miR21'] >= 8, 1, 0)
    
  • 用pandas.cut做分箱赋值:适合后续需要扩展为多阈值、多分组的场景,单阈值二分类下写法过重
    df['group'] = pd.cut(
        df['miR21'],
        bins=[-float("inf"), 8, float("inf")],
        labels=[0, 1]
    ).astype(int)
    

避坑提醒:不要使用df.apply加lambda逐行判断赋值,矢量化运算的运行效率比逐行apply高10~100倍,数据集体量越大性能差距越明显。


结果校验

你可以用以下代码确认新生成的group列和你之前拆分的两个子集完全匹配:

# 校验分组样本量和之前拆分的子集一致
assert df[df['group'] == 1].shape[0] == dfn21h.shape[0]
assert df[df['group'] == 0].shape[0] == dfn21l.shape[0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:18:16