Pandas DataFrame按日期合并后如何对指定列NaN值前向填充到特定日期
Pandas指定日期范围内前向填充空值实现方法
前置准备
首先需确保date列转换为Pandas datetime类型,避免字符串日期比较出现匹配错误:
import pandas as pd # 示例数据构造(可直接复现) df_1 = pd.DataFrame({ 'date': ['01/12', '02/12', '03/12', '04/12', '05/12', '06/12', '07/12'], 'value1': [10, 20, 30, 40, 60, 70, 80] }) df_2 = pd.DataFrame({ 'date': ['01/12', '03/12', '05/12'], 'value2': [100, 300, 500] }) # 左连接合并 df = pd.merge(df_1, df_2, how='left', on=['date']) # 转换日期格式,指定格式为日/月 df['date'] = pd.to_datetime(df['date'], format='%d/%m')
核心实现代码
仅对05/12及之前的value2空值做前向填充,后续空值保留:
# 设定填充截止日期 cutoff_date = pd.to_datetime('05/12', format='%d/%m') # 筛选截止日期前的行执行前向填充,仅赋值给对应范围的行 df.loc[df['date'] <= cutoff_date, 'value2'] = df.loc[df['date'] <= cutoff_date, 'value2'].ffill()
处理结果
执行后输出符合需求:
| date | value1 | value2 |
|---|---|---|
| 1900-12-01 00:00:00 | 10 | 100.0 |
| 1900-12-02 00:00:00 | 20 | 100.0 |
| 1900-12-03 00:00:00 | 30 | 300.0 |
| 1900-12-04 00:00:00 | 40 | 300.0 |
| 1900-12-05 00:00:00 | 60 | 500.0 |
| 1900-12-06 00:00:00 | 70 | NaN |
| 1900-12-07 00:00:00 | 80 | NaN |
如果需要还原日期为字符串格式,处理完成后可执行转换:
df['date'] = df['date'].dt.strftime('%d/%m')
内容的提问来源于stack exchange,提问作者kobo
相关产品推荐
相关产品推荐

