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

Python pandas 使用conditional ffill将月初值填充至当月月末

实现方案

你可以通过保留每月初有效值+ffill向前填充的方式完成需求,完整操作代码如下:

第一步:生成测试DataFrame(已固定时间为2021年12月,方便验证效果)

import pandas as pd
import numpy as np
from datetime import datetime, timedelta

# 固定起始时间为2021-12-01,匹配你描述的测试场景
date_start = datetime(2021,12,1)
days = pd.date_range(date_start, date_start + timedelta(35), freq='D')

np.random.seed(seed=1111)
data = np.random.randint(1, high=100, size=len(days))
df = pd.DataFrame({'test': days, 'col2': data})
df = df.set_index('test')

第二步:核心填充逻辑(使用ffill实现)

简洁分组写法

# 按月份分组,仅保留每月第一天的col2值,其余位置置空后用ffill向前填充整月
df['col2'] = df['col2'].groupby(df.index.to_period("M")).apply(
    lambda x: x.where(x.index.is_month_start, np.nan).ffill()
)

直观辅助列写法

不想用分组逻辑可以选这个方案,可读性更高

# 新增辅助列标记当月第一天
df['is_month_first'] = df.index.is_month_start
# 非第一天的col2值置空
df.loc[~df['is_month_first'], 'col2'] = np.nan
# ffill填充所有空值
df['col2'] = df['col2'].ffill()
# 按需删除辅助列
df.drop('is_month_first', axis=1, inplace=True)

效果验证

运行以下代码可查看12月所有行的填充结果,所有值均为9:

print(df.loc[df.index.month == 12])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:27:01