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

为DataFrame补全缺失数据与日期 按分组向前填充指定列

解决方法:按分组对指定列执行向前填充(Forward Fill)

嘿,我来帮你搞定这个需求!基于你描述的场景,我们可以用Pandas的分组、重索引和填充方法来实现,下面是具体步骤和代码示例:

步骤说明

  1. 确保日期列是datetime类型:Pandas对时间序列的操作依赖于正确的日期格式,所以首先要把字符串格式的日期转换成datetime类型。
  2. 生成完整的日期序列:因为你的数据有固定的日期范围(3/31/1960到6/30/1960),我们需要为每个A、B组合生成这个范围内的所有日期,避免原数据中缺失日期导致填充不完整。
  3. 分组后填充:按A、B列分组,对每个组补全缺失的日期,再对C、D列执行向前填充。

完整代码示例

import pandas as pd

# 假设你的原始DataFrame名为df,先转换日期列格式
df['日期'] = pd.to_datetime(df['日期'])

# 生成指定范围内的完整日期序列
full_date_range = pd.date_range(start='1960-03-31', end='1960-06-30')

# 分组处理:补全日期 + 向前填充C、D列
final_df = df.groupby(['A', 'B']).apply(
    lambda group: (
        group.set_index('日期')
             .reindex(full_date_range)
             .ffill(subset=['C', 'D'])  # 仅对C、D列执行向前填充
             .reset_index()
    )
).reset_index(drop=True)

# 把重索引后的index列改回原日期列名
final_df = final_df.rename(columns={'index': '日期'})

补充说明

  • 如果你的原始数据中,每个A、B分组内的日期已经是连续无缺失的,那可以简化操作,直接分组后对C、D列执行填充:
    final_df = df.groupby(['A', 'B'])[['C', 'D']].ffill()
    
  • ffill()方法会用前一行的非空值填充当前行的NaN,确保每个分组内的C、D列数据按日期向前延续。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:06:11