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

如何用Python按指定条件修改并筛选DataFrame

问题描述

现有如下DataFrame:

col1col2col3
A1data 1
Val Bdata 2data 6
Val Bdata 3data
A2data 4data
Val Bdata 5data 7

需求:在col1列中,若单元格值为Val B且紧跟在以"A"开头的单元格下方,则将该Val B替换为上方以"A"开头的单元格值,保留该行其他列的值;忽略不满足该条件的Val B行,最终得到如下结果:

col1col2col3
A1data 2data 6
A2data 5data 7
Python实现方案

可以通过pandas的移位方法标记符合条件的行,再提取并处理目标数据:

import pandas as pd

# 构造原始DataFrame
df = pd.DataFrame({
    'col1': ['A1', 'Val B', 'Val B', 'A2', 'Val B'],
    'col2': ['data 1', 'data 2', 'data 3', 'data 4', 'data 5'],
    'col3': ['', 'data 6', 'data', 'data', 'data 7']
})

# 标记符合条件的行:当前行是Val B,且前一行是以"A"开头的值
mask = (df['col1'] == 'Val B') & (df['col1'].shift().str.startswith('A', na=False))

# 提取目标行并替换col1值
result = df[mask].copy()
result['col1'] = df['col1'].shift()[mask]

# 重置索引(可选,让结果索引更规整)
result = result.reset_index(drop=True)

print(result)

代码说明

  • df['col1'].shift():获取每行的前一行col1值
  • df['col1'].shift().str.startswith('A', na=False):判断前一行值是否以"A"开头,na=False确保空值不被误判
  • 组合的mask条件精准筛选出需要处理的行
  • 对筛选出的行,直接将col1替换为前一行的"A"开头值,保留其他列数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:15:38