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

如何将DataFrame的EndDate匹配到Date列并向前填充Value

Pandas:匹配EndDate到对应Date位置并向前填充Value

步骤1:转换日期列类型

先将所有日期字符串转为datetime类型,避免字符串匹配的误差:

import pandas as pd

# 原始数据
df = pd.DataFrame({
    'Date': ['1/1/2022', '1/2/2022', '1/3/2022', '1/4/2022', '1/5/2022', 
             '1/6/2022', '1/7/2022', '1/8/2022','1/9/2022'],
    'Value': [None, 10, None, 15, None, None, 50, None,None],
    'StartDate': [None, '1/2/2022', None, '1/4/2022', None, None, '1/7/2022', None, None],
    'EndDate': [None, '1/3/2022', None,  '1/6/2022',  None, None, '1/9/2022', None,None]
})

# 转换日期列为datetime类型
df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%Y')
df['StartDate'] = pd.to_datetime(df['StartDate'], format='%m/%d/%Y')
df['EndDate'] = pd.to_datetime(df['EndDate'], format='%m/%d/%Y')

步骤2:生成NewDate列

通过构建EndDate映射字典,将EndDate匹配到Date列对应的行:

# 提取非空的EndDate,构建{日期:日期}的映射字典
end_date_map = df.loc[df['EndDate'].notna(), 'EndDate'].to_dict()
# 用Date列匹配映射,生成NewDate(仅当Date等于某个EndDate时填充,否则为NaN)
df['NewDate'] = df['Date'].map(end_date_map)

步骤3:基于NewDate区间向前填充Value

无需循环,用分组方式高效实现区间内的向前填充:

# 生成分组标识:每遇到一个非空的NewDate,分组ID递增
group_ids = df['NewDate'].notna().cumsum()
# 按分组对Value列执行向前填充
df['Value'] = df.groupby(group_ids)['Value'].ffill()

最终结果

处理后的DataFrame与期望输出一致(可选转换回字符串格式对齐原始数据):

# 转换回字符串格式
df['Date'] = df['Date'].dt.strftime('%m/%d/%Y')
df['StartDate'] = df['StartDate'].dt.strftime('%m/%d/%Y').where(df['StartDate'].notna(), None)
df['EndDate'] = df['EndDate'].dt.strftime('%m/%d/%Y').where(df['EndDate'].notna(), None)
df['NewDate'] = df['NewDate'].dt.strftime('%m/%d/%Y').where(df['NewDate'].notna(), None)

print(df)

输出:

Date  Value  StartDate    EndDate    NewDate
0  01/01/2022    None       None       None       None
1  01/02/2022   10.0  01/02/2022  01/03/2022       None
2  01/03/2022   10.0       None       None  01/03/2022
3  01/04/2022   15.0  01/04/2022  01/06/2022       None
4  01/05/2022   15.0       None       None       None
5  01/06/2022   15.0       None       None  01/06/2022
6  01/07/2022   50.0  01/07/2022  01/09/2022       None
7  01/08/2022   50.0       None       None       None
8  01/09/2022   50.0       None       None  01/09/2022

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:07:08