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

修复Pandas代码:用最近OPEN行B值填充对应CLOSE行C列

修复方案:匹配最近OPEN行的B值到CLOSE行的C列

问题分析

你的原代码错误在于使用groupby('A')后,transform(lambda x: x.shift())只会在**同组内(即所有CLOSE行组成的组)**向上移位,自然取到的是上一个CLOSE行的B值,而非最近的OPEN行的值。

正确实现步骤

我们可以通过标记OPEN行的B值并向前填充的方式,让每个CLOSE行自动关联到上方最近的OPEN行的B值:

1. 示例数据构造(方便验证)

import pandas as pd

# 模拟你的数据结构
data = pd.DataFrame({
    'A': ['OPEN', 'OTHER', 'CLOSE', 'OPEN', 'CLOSE', 'OTHER', 'OPEN', 'OTHER', 'CLOSE'],
    'B': [23120, 123, 456, 23330, 789, 345, 23440, 678, 901]
})

2. 一行代码实现需求

# 仅在A列为CLOSE时,将最近的上方OPEN行的B值填充到C列
data.loc[data['A'] == 'CLOSE', 'C'] = data['B'].where(data['A'] == 'OPEN').ffill()

3. 分步逻辑解释

  • data['B'].where(data['A'] == 'OPEN'):只保留OPEN行的B值,其他行设为NaN
  • .ffill():向前填充NaN,让每个位置都拿到最近的上方OPEN行的B值
  • 最后通过loc筛选出CLOSE行,将填充后的值赋值给C列

验证结果

执行后你的DataFrame会变成:

ABC
0OPEN23120NaN
1OTHER123NaN
2CLOSE45623120.0
3OPEN23330NaN
4CLOSE78923330.0
5OTHER345NaN
6OPEN23440NaN
7OTHER678NaN
8CLOSE90123440.0

完全符合你期望的第一个CLOSE行C列值为23120,下一个为23330的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 03:02:14