Pandas中resample()时如何对object列执行ffill/bfill填充?
解决Pandas重采样时Object类型列的填充问题
首先要确保你的Date列是datetime类型并设为索引,否则resample无法正常工作:
import pandas as pd # 构造示例数据 data = { "Date": ["2022-10-23 15:40:41", "2022-10-23 18:43:13", "2022-10-24 15:40:41", "2022-10-24 18:43:13"], "Sort": ["A", "B", "C", "D"], "Value": [1, 2, 3, 4] } df = pd.DataFrame(data) # 转换为datetime并设为索引 df["Date"] = pd.to_datetime(df["Date"]) df = df.set_index("Date")
接下来有两种常用方法实现需求:
方法一:分列处理后合并
先对Sort列按15分钟频率重采样并执行填充操作,再单独计算Value列的均值,最后合并两个结果:
# 对Sort列重采样并向前填充(ffill),换成bfill()就是向后填充 sort_resampled = df["Sort"].resample("15min").ffill() # 对Value列重采样求均值 value_resampled = df["Value"].resample("15min").mean() # 合并结果 result = pd.concat([sort_resampled, value_resampled], axis=1)
方法二:用agg()指定列操作
直接通过resample().agg()为不同列分配对应的处理逻辑,一步得到结果:
result = df.resample("15min").agg({ "Sort": "ffill", # 对Sort列执行向前填充 "Value": "mean" # 对Value列计算均值 })
注意:如果重采样后的时间段没有原始数据,ffill会沿用最近的前一个有效值,bfill会使用最近的后一个有效值;首尾无对应填充值的时间段会出现NaN,可根据需求用fillna()进一步处理。
内容的提问来源于stack exchange,提问作者Mischbot
相关产品推荐
相关产品推荐

