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

遍历Pandas DataFrame行 清空指定字符串后至特定列前的单元格值

Pandas DataFrame指定区间单元格置空实现

需求说明

  • 每行存在固定目标字符串a,需要将该字符串所在列之后、到zz列之前的所有单元格值清空
  • zz列本身、以及zz列之后的所有列(如示例中的aa列)取值保持不变
  • 示例输入输出如下(原示例output字典存在语法笔误,zz行末尾缺失逗号):
# 输入df
df = {
    'bb': ['a', 'z', 'y'],
    'vv': ['b', 'a', 'z'],
    'ww': ['c', 'b', 'a'],
    'xx': ['d', 'c', 'b'],
    'yy': ['e', 'd', 'c'],
    'zz': ['f', 'e', 'd'],
    'aa': ['g', 'f', 'e']
}

# 预期output
output = {
    'bb': ['a', 'z', 'y'],
    'vv': ['', 'a', 'z'],
    'ww': ['', '', 'a'],
    'xx': ['', '', ''],
    'yy': ['', '', ''],
    'zz': ['f', 'e', 'd'],
    'aa': ['g', 'f', 'e']
}

实现代码

优先用pandas内置向量化方法定位目标位置,避免全量逐行逐元素遍历,数据量较大时性能更好:

import pandas as pd

# 配置参数
target_str = 'a'
end_keep_col = 'zz'

# 初始化DataFrame
df = pd.DataFrame({
    'bb': ['a', 'z', 'y'],
    'vv': ['b', 'a', 'z'],
    'ww': ['c', 'b', 'a'],
    'xx': ['d', 'c', 'b'],
    'yy': ['e', 'd', 'c'],
    'zz': ['f', 'e', 'd'],
    'aa': ['g', 'f', 'e']
})

# 获取边界列的索引,划定需要处理的列范围
end_col_pos = df.columns.get_loc(end_keep_col)
process_columns = df.columns[:end_col_pos]

# 定位每行第一个匹配目标字符串的列
match_col = df[process_columns].eq(target_str).idxmax(axis=1)

# 将匹配位置之后、边界列之前的单元格置空
for row_idx, col_name in match_col.items():
    col_pos = process_columns.get_loc(col_name)
    if col_pos < len(process_columns) - 1:
        empty_cols = process_columns[col_pos + 1 :]
        df.loc[row_idx, empty_cols] = ''

# 验证输出,结果和预期output完全一致
print(df.to_dict(orient='list'))

补充说明

  • 上述代码默认所有行在zz列之前都存在目标字符串,如果存在无匹配的行,可在置空逻辑前增加判断,跳过匹配位置不存在的行即可
  • 如果需要修改目标字符串或边界列,直接调整target_str和end_keep_col两个参数即可复用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:45:36