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

Python:如何用前次非相等状态值填充DataFrame的C列?

问题解决:DataFrame中填充上一次非重复状态值

原始实现与问题

原始通过np.select根据A、B列数值关系生成C列,代码如下:

import numpy as np
import pandas as pd

# 假设df是目标DataFrame
conditions = [df['A'] > df['B'], (df['A'] == df['B']), df['A'] < df['B']]
choices = ["A大于B", 'same', 'B大于A']
df["C"] = np.select(conditions, choices, default=np.nan)

生成的结果如下:

ABC
12B大于A
22same
22same
32A大于B
33same
33same
36B大于A

现在需要将C列中标记为same的行,替换为上一次A、B数值不等时的状态值,预期结果:

ABC
12B大于A
22B大于A
22B大于A
32A大于B
33A大于B
33A大于B
36B大于A

解决方案

可以通过替换same为缺失值,再使用向前填充实现需求,步骤如下:

  1. 按原始逻辑生成C列,将same替换为缺失值
  2. 用ffill()方法向前填充,即用上一个非缺失值覆盖当前缺失值

代码实现:

# 生成初始C列
conditions = [df['A'] > df['B'], (df['A'] == df['B']), df['A'] < df['B']]
choices = ["A大于B", 'same', 'B大于A']
df["C"] = np.select(conditions, choices, default=np.nan)

# 替换same为缺失值并向前填充
df["C"] = df["C"].replace('same', pd.NA).ffill()

关于“将前一个变量的值赋给当前变量”的说明

在Pandas中实现这类需求,常用方法有两种:

  • 向前填充法:ffill()或fillna(method='ffill'),自动用前一个非缺失值填充当前缺失值,适合连续重复的场景,无需额外处理边界值
  • 手动取前值法:用shift()获取前一行的数值,再通过条件判断替换,示例:
    # 生成前一行的C列值
    df['prev_C'] = df['C'].shift(1)
    # 当当前C为same时,用前一行的值替换
    df['C'] = np.where(df['C'] == 'same', df['prev_C'], df['C'])
    
    注意:shift(1)会让第一行的prev_C变为NaN,如果第一行是same需要额外处理,而ffill()会自动保留第一个有效值,更适配你的场景。

内容的提问来源于stack exchange,提问作者Batuhan Hazar GÜLER

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:54:32