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

Pandas如何根据每行Col列取值选取对应列值生成NewCol列

Pandas按行动态取对应列值的高效实现

针对50万行、100列的大规模数据集,禁止使用for循环、iterrows()、apply(axis=1)这类Python层逐行遍历的写法,这类写法性能极差。以下是两种纯向量化的优雅实现,性能比逐行遍历高2~3个数量级:

  • 方法1:NumPy高级索引(全版本兼容,性能最优)
    完全在C层执行计算,是目前所有方案里速度最快的,适配所有pandas版本:

    import numpy as np
    # 生成行索引,匹配Col列指定列的位置索引
    rows = np.arange(len(df))
    cols = df.columns.get_indexer(df["Col"])
    # 批量取值赋值
    df["NewCol"] = df.values[rows, cols]
    
  • 方法2:pandas内置lookup方法(旧版本简洁写法)
    如果你使用pandas 1.2.0之前的版本,可以直接调用内置API,写法更简洁,性能和NumPy方案接近:

    # 注意:pandas 1.2.0及以上版本已标记该方法为弃用,优先使用上面的NumPy方案
    df["NewCol"] = df.lookup(df.index, df["Col"])
    

性能参考:50万行数据规模下,上述两种方案耗时均在10ms级别;逐行循环/apply方案耗时通常在5~30秒区间,数据量越大性能差距越明显。

原始输入DataFrame结构:
原始DataFrame样例

新增NewCol列后的预期效果:
处理后预期效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 12:57:46