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

如何在Pandas中按指定规则处理DataFrame并更新ColD

Pandas实现指定行筛选与ColD计算逻辑

先给出原始数据:

import pandas as pd

df = pd.DataFrame({
    'ColA': [1, 2, 3, 11111, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9],
    'ColB': [11, 5, 22, 66, 4, 33333, 45, 91, 78, 10, 17, 55, 73, 85, 56, 99, 4, 74],
    'ColC': ['A', 'B', 'X', 'C', 'D', 'X', 'E', 'F', 'G', 'A', 'B', 'X', 'C', 'D', 'X', 'E', 'F', 'G'],
    'ColD': [0,0,0,0,0, 22222,0,0,0,0,0,48,0,0,52,0,0,0]
})

实现步骤:

  1. 保留有效行范围:只保留第一个X到最后一个X之间的所有行,去掉首尾无效部分
# 获取所有ColC等于'X'的行索引
x_positions = df[df['ColC'] == 'X'].index
# 切片筛选:从第一个X到最后一个X的所有行
df = df.loc[x_positions[0]:x_positions[-1]]
# 重置索引(方便后续按索引操作,可选)
df = df.reset_index(drop=True)
# 重新获取筛选后数据中X的位置
x_positions = df[df['ColC'] == 'X'].index
  1. 遍历相邻X对,计算并更新ColD
# 遍历每一对相邻的X(从第1组到倒数第1组)
for idx in range(len(x_positions)-1):
    # 前一个X的下一行索引
    next_row_after_prev_x = x_positions[idx] + 1
    # 获取Y:前一个X下一行的ColA值
    y_value = df.loc[next_row_after_prev_x, 'ColA']
    # 获取Z:后一个X所在行的ColB值
    z_value = df.loc[x_positions[idx+1], 'ColB']
    # 计算Z-Y,赋值给后一个X对应的ColD
    df.loc[x_positions[idx+1], 'ColD'] = z_value - y_value

验证结果

运行后df['ColD']会完全匹配目标结果:

  • 第二个X的ColD:33333 - 11111 = 22222
  • 第三个X的ColD:55 - 7 = 48
  • 第四个X的ColD:56 - 4 = 52

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:57:17