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

Pandas中按商品及日期分组填充purchase_price_unit列NaN值遇阻求助

问题分析与解决方案

核心问题原因

你同时按purchase_item和purchase_date分组后无法填充,本质是每个分组仅包含同一商品同一日期的数据,组内没有更早的历史记录(比如上月数据),ffill()(向前填充)自然找不到可复用的前值,所以完全无效。

你的需求是「同商品下用上月对应价格填充NaN」,正确的分组逻辑应该是仅按商品分组,在每个商品组内按日期排序后再做向前填充——这样才能让NaN值取到该商品上一个时间点(上月)的有效价格。

修正后的代码实现

import pandas as pd

# 确保purchase_date是datetime格式(如果原本不是的话)
purchase_df['purchase_date'] = pd.to_datetime(purchase_df['purchase_date'])

# 按商品分组,组内按日期升序排序后对价格列做向前填充
purchase_df['purchase_price_unit'] = purchase_df.groupby('purchase_item', group_keys=False) \
    .apply(lambda x: x.sort_values('purchase_date')['purchase_price_unit'].ffill())

额外说明

  • 如果你的日期是「年月」格式(比如2024-01),pd.to_datetime()依然可以正确识别,排序逻辑不受影响。
  • 加上group_keys=False是为了避免分组键被添加到结果索引中,保持原DataFrame结构一致。
  • 如果需要用下月值填充本月NaN,可将ffill()替换为bfill(),逻辑同理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:20:21