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

Python如何将DataFrame每行指定列之后的所有值设置为0

实现方法

你可以结合numpy的广播特性生成布尔掩码,再批量赋值,性能远高于逐行遍历:

步骤说明

  • 首先提取要处理的数值列(即列名是1~8的列),将列名转为整数类型和Select列的值做匹配
  • 生成掩码:数值列的列序号大于当前行Select值的位置即为需要置0的位置
  • 直接对掩码位置赋值为0即可

代码示例

import pandas as pd
import numpy as np

# 构造示例数据
df = pd.DataFrame({
    '1': [54,36,34,35,27],
    '2': [33,54,29,19,39],
    '3': [46,32,11,22,43],
    '4': [23,14,14,45,22],
    '5': [35,32,21,55,22],
    '6': [22,21,29,16,24],
    '7': [36,54,33,21,22],
    '8': [36,55,46,74,55],
    'Select': [3,4,6,5,3],
    'Value': [46,14,29,55,43]
})

# 提取要处理的数值列(列名1~8)
num_cols = [str(i) for i in range(1,9)]
# 将列名转成整数,和Select列做广播比较,生成需要置0的掩码
mask = np.arange(1,9) > df['Select'].values[:, None]
# 赋值为0
df.loc[:, num_cols] = df.loc[:, num_cols].where(~mask, 0)

print(df)

代码说明

  • np.arange(1,9)生成的是数值列对应的序号[1,2,3,4,5,6,7,8]
  • df['Select'].values[:, None]把Select列从一维数组转成二维列向量,利用numpy广播特性逐行比较,得到的mask是和数值列形状完全一致的布尔数组,True的位置就是需要置0的位置
  • where方法保留mask为False位置的原值,mask为True的位置替换为0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:45:02