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

基于列标识填充DataFrame行值:将colA=4的行colC替换为前序colA=3的行值

解决方案

步骤说明

核心思路是先提取所有colA=3对应的colC值,再通过前向填充将这些值传递给后续的colA=4记录,最后完成替换。

代码实现

import pandas as pd

# 构造原始DataFrame
data = {
    'colA': [3,4,4,4,3,4,4,3,4],
    'colB': ['air','ground','ground','ground','air','ground','air','ground','ground'],
    'colC': ['00JTHYU1','00JTHYU0','00JTHYU0','00JTHYU0','00JTHYU4','00JTHYU0','00JTHYU0','00JTHYU7','00JTHYU0']
}
df = pd.DataFrame(data)

# 1. 创建辅助列,仅保留colA=3时的colC值,其余为NaN
df['colC_3'] = df.loc[df['colA'] == 3, 'colC']

# 2. 对辅助列执行前向填充,让后续行继承最近的colA=3对应的colC值
df['colC_3'] = df['colC_3'].ffill()

# 3. 将colA=4的记录的colC替换为填充后的辅助列值,colB保持不变
df.loc[df['colA'] == 4, 'colC'] = df.loc[df['colA'] == 4, 'colC_3']

# 4. 可选:删除辅助列
df = df.drop('colC_3', axis=1)

print(df)

执行结果

colAcolBcolC
03air00JTHYU1
14ground00JTHYU1
24ground00JTHYU1
34ground00JTHYU1
43air00JTHYU4
54ground00JTHYU4
64air00JTHYU4
73ground00JTHYU7
84ground00JTHYU7

为什么直接用ffill/shift没效果?

如果直接对colC用ffill(),会覆盖所有NaN值,但原始colA=4的colC本身有值(00JTHYU0),不会被填充;而单纯shift()只能获取上一行的值,无法精准定位到最近的colA=3的记录。通过先过滤出目标值再填充的方式,才能实现需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 16:57:19