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

如何用Pandas DataFrame内同event_num行填充缺失字段?

按event_num分组填充Pandas DataFrame缺失值

问题场景

现有如下Pandas DataFrame:

indexevent_numrecording_numsession_codeweather
9937811NaNNaNNaN
993791111P1clear
9938011NaNNaNNaN
9938144P2rain
993823737Q4wind
993833939Q5snow
993844NaNNaNNaN

需要将recording_num、session_code、weather列的缺失值,填充为对应event_num分组的有效值,最终得到:

indexevent_numrecording_numsession_codeweather
993781111P1clear
993791111P1clear
993801111P1clear
9938144P2rain
993823737Q4wind
993833939Q5snow
9938444P2rain

单独使用my_df.ffill(axis=0)无法解决问题,因为该方法仅按行顺序从前到后填充,会错误地将前一个不同event_num的值填充到当前行(比如最后一行event_num=4会被填充为event_num=39的对应值)。

解决方案

方法一:组内前后填充组合

按event_num分组后,对目标列先执行向前填充(ffill)再执行向后填充(bfill),覆盖组内所有位置的缺失值:

import numpy as np
import pandas as pd

# 构建初始DataFrame
data = {
    "index": np.arange(99378, 99385), 
    "event_num": [11, 11, 11, 4, 37, 39, 4],
    "recording_num": [np.nan, 11, np.nan, 4, 37, 39, np.nan], 
    "session_code": [np.nan, 'P1', np.nan, 'P2', 'Q4', 'Q5', np.nan], 
    "weather": [np.nan, 'clear', np.nan, 'rain', 'wind', 'snow', np.nan]
}
my_df = pd.DataFrame(data)

# 指定需要填充的列
fill_columns = ['recording_num', 'session_code', 'weather']

# 分组填充缺失值
my_df[fill_columns] = my_df.groupby('event_num')[fill_columns].transform(
    lambda x: x.ffill().bfill()
)

print(my_df)

方法二:取组内第一个有效值填充整组

由于每个event_num分组内的有效值唯一,可直接提取组内第一个非缺失值,填充整组的缺失值:

my_df[fill_columns] = my_df.groupby('event_num')[fill_columns].transform(
    lambda x: x.dropna().iloc[0]
)

两种方法都能得到目标结果,方法二更高效,适合每组有效值唯一的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:40:55