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

Pandas按user_id分组前向填充时不填充最后有效值之后的空值如何实现

Pandas按分组前向填充且不填充最后有效值后缺失值的解决方案

核心逻辑

按user_id分组后,单独计算每个分组values列最后一个有效值的位置,仅对该位置之前的缺失值做前向填充,位置之后的缺失值保持为空。

完整可运行代码

import pandas as pd
import numpy as np

# 示例数据构造
data = pd.DataFrame({'user_id' : ['a1', 'a1', 'a1', 'a1', 'a1', 'a1', 'a2','a2','a2','a2','a2','a2'], 
                     'month' : ['1/1/1995','2/1/1995','3/1/1995','4/1/1995','5/1/1995','6/1/1995',
                                '1/1/1995','2/1/1995','3/1/1995','4/1/1995','5/1/1995','6/1/1995'],
                     'values': [1,1,np.nan, 2,np.nan,np.nan,1,1,np.nan,np.nan,np.nan,2]})

# 核心处理代码
data['values'] = data.groupby('user_id')['values'].apply(
    lambda x: x.loc[:x.last_valid_index()].ffill()
)

方案说明

你之前尝试的两种方案错误原因如下:

  • 直接全局ffill:既没有按用户分组处理,也没有截断每个分组最后有效值之后的部分,会填充所有缺失值
  • 未分组的apply操作:是对整个DataFrame的每一列单独计算last_valid_index,取的是整个values列的最后一个有效值位置(示例中是a2用户6月的记录),因此会填充所有行在该位置之前的缺失值,不符合分组独立处理的要求

上述代码中,分组后每个用户单独计算自己的最后有效值位置,仅填充该位置前的缺失值,超出位置的部分自动保留NaN,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:15:04