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

如何用上下行均值填充DataFrame中0值行?动态处理多行0值

使用Pandas动态填充DataFrame中value为0的行(含连续多0场景)

核心解决方案

利用Pandas的interpolate()方法结合值替换,可快速实现单个或连续多个0值的动态填充,填充逻辑为取前后最近非0值的线性插值(单个0时即为前后值的均值)。

步骤示例

  1. 构造示例DataFrame
import pandas as pd

# 基础示例数据
data = {
    'ds': ['2023-07-01 17:00:00', '2023-07-01 18:00:00', '2023-07-01 19:00:00'],
    'value': [100, 0, 300]
}
df = pd.DataFrame(data)
# 可选:将ds列转为时间类型,规范时间序列格式
df['ds'] = pd.to_datetime(df['ds'])
  1. 填充0值
# 将value列的0替换为缺失值NA
df['value'] = df['value'].replace(0, pd.NA)
# 用线性插值填充缺失值,自动适配单个/连续多个0的场景
df['value'] = df['value'].interpolate(method='linear')

执行后得到的结果:

ds  value
0 2023-07-01 17:00:00  100.0
1 2023-07-01 18:00:00  200.0
2 2023-07-01 19:00:00  300.0

处理连续多个0的场景

如果存在连续多个0值,该方法会自动将前后非0值的差值均匀分配到每个缺失位置,示例如下:

# 含连续3个0的示例数据
data_multi = {
    'ds': ['2023-07-01 17:00:00', '2023-07-01 18:00:00', '2023-07-01 19:00:00', '2023-07-01 20:00:00', '2023-07-01 21:00:00'],
    'value': [100, 0, 0, 0, 500]
}
df_multi = pd.DataFrame(data_multi)
df_multi['ds'] = pd.to_datetime(df_multi['ds'])

# 同样的填充逻辑
df_multi['value'] = df_multi['value'].replace(0, pd.NA).interpolate(method='linear')

处理后结果:

ds  value
0 2023-07-01 17:00:00  100.0
1 2023-07-01 18:00:00  200.0
2 2023-07-01 19:00:00  300.0
3 2023-07-01 20:00:00  400.0
4 2023-07-01 21:00:00  500.0

补充说明

  • 如果希望保留原DataFrame不被修改,可以先复制再处理:df_filled = df.copy()后执行填充逻辑。
  • 若你的数据是严格按时间间隔排序的时间序列,也可以使用method='time'进行插值,效果与linear一致,但会更贴合时间维度的逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 07:35:23