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

如何高效填充Pandas DataFrame:基于最近含'String'参考行的对应列值

如何高效填充Pandas DataFrame:基于最近含'String'参考行的对应列值

嘿,这个需求我太熟了!本质上就是带条件的前向填充,完全可以用Pandas原生函数组合搞定,效率比你之前手动生成新DataFrame的方法高太多,根本不用绕弯路~

先给你理清楚核心逻辑:我们只需要先把所有「最后一列是'String'」的参考行的对应列值保留下来,其他行的对应列设为空值(NaN),然后用Pandas的ffill()(前向填充)就能自动把参考值一直填充到下一个参考行出现前的所有行,完美匹配你的要求!

步骤1:构造示例数据(匹配你的需求)

先把你描述的原始数据转成可运行的DataFrame,同时把需要填充的X、Y替换成NaN(如果你的原始数据里是特定标记比如'X',可以先转成NaN,后面会说):

import pandas as pd
import numpy as np

# 对应你给出的原始数据,把X/Y换成NaN
data = [
    [1, 2, 3, 'String', ''],
    [4, '', np.nan, '', ''],
    [5, '', np.nan, '', ''],
    [6, 7, 'String', '', ''],
    [1, '', np.nan, '', '']
]
df = pd.DataFrame(data, columns=['col0', 'col1', 'col2', 'col3', 'col4'])

步骤2:提取参考行的有效数值

针对需要填充的列(比如你例子里X/Y所在的col2),我们用where()函数只保留参考行(col4 == 'String',也就是最后一列是'String'的行)的数值,其他行设为NaN:

# 提取col2列中,仅参考行的有效数值,其他为NaN
filled_col = df['col2'].where(df['col4'] == 'String')

步骤3:前向填充并替换原列

直接对上面得到的filled_col用ffill(),然后把结果赋值回原DataFrame的对应列就搞定了:

df['col2'] = filled_col.ffill()

看结果!

运行完上面的代码,你的DataFrame就会变成你想要的样子:

col0 col1  col2    col3 col4
0     1    2   3.0  String     
1     4        3.0             
2     5        3.0             
3     6    7   NaN  String     
4     1        7.0             

完全实现了“第一个3保留到下一个'String'参考行出现,之后替换为7”的需求~

额外处理:如果原始数据是X/Y标记而非NaN

如果你的原始数据里不是NaN,而是用'X'、'Y'标记需要填充的位置,先把这些标记替换成NaN就行:

# 把X/Y替换为NaN,再执行上面的填充步骤
df['col2'] = df['col2'].replace(['X', 'Y'], np.nan)

为什么这个方法高效?

因为全程用的是Pandas的矢量化操作,没有循环或手动切片,处理百万级别的数据都毫无压力,比你之前的方法快几个数量级。本质上就是把你的需求转化成了标准的前向填充场景,完美利用了Pandas的底层优化能力。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 12:40:30