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

如何按Datetime遍历Pandas DataFrame并向前填充-1值?

解决Pandas按code向前填充非-1值的问题

问题分析

你当前代码的核心错误是分组逻辑错误:你按calendardate分组,每个分组仅包含当前时间点的记录,无法获取同一code下更早的非-1值进行填充。正确的分组维度应该是code,因为填充逻辑依赖于同一code的时间序列历史数据。

正确实现步骤

  • 按code分组,确保每个组内的记录按calendardate升序排列(保证历史数据在前)
  • 将A/B/C列中的-1替换为pd.NA,使用ffill()向前填充最近的非缺失值
  • 填充完成后,遍历每个唯一的calendardate,获取对应时间点的所有记录

完整代码

import pandas as pd

# Sample DataFrame
data = {
    'code': ['A1', 'A1', 'A1', 'A1', 'A1', 'A1', 'B1', 'B1', 'B1', 'B1'],
    'calendardate': [
        '2024-02-29 09:00:00', '2024-02-29 09:05:00', '2024-02-29 09:10:00', '2024-02-29 09:15:00',
        '2024-02-29 09:20:00', '2024-02-29 09:25:00', '2024-02-29 09:00:00', '2024-02-29 09:05:00',
        '2024-02-29 09:10:00', '2024-02-29 09:15:00'
    ],
    'A': [10, -1, 20, -1, 30, 40, 50, -1, -1, 60],
    'B': [-1, 15, -1, 25, -1, 35, -1, 45, -1, -1],
    'C': [-1, -1, -1, 35, -1, -1, -1, -1, 55, 65]
}

df = pd.DataFrame(data)
df['calendardate'] = pd.to_datetime(df['calendardate'])

# 按code分组,对每个组内的时间序列进行向前填充
def forward_fill_by_code(group):
    # 按时间升序排序,确保历史数据顺序正确
    group_sorted = group.sort_values(by='calendardate')
    # 对A/B/C列依次替换-1并向前填充
    for col in ['A', 'B', 'C']:
        group_sorted[col] = group_sorted[col].replace(-1, pd.NA).ffill()
    return group_sorted

# 应用分组填充逻辑,group_keys=False避免额外索引
filled_df = df.groupby('code', group_keys=False).apply(forward_fill_by_code)

# 遍历每个唯一时间点,输出对应切片数据
for dt in filled_df['calendardate'].unique():
    print(f"=== Datetime: {dt} ===")
    time_slice = filled_df[filled_df['calendardate'] == dt]
    for _, row in time_slice.iterrows():
        print(f"Code: {row['code']}, A: {row['A']}, B: {row['B']}, C: {row['C']}")
    print("------------------------")

关键说明

  • groupby('code'):将同一code的所有时间记录归为一组,确保ffill()能访问到该code的历史非-1值
  • sort_values(by='calendardate'):保证时间序列顺序正确,避免填充时取到未来数据
  • 填充完成后,直接按calendardate筛选即可得到每个时间点的最终数据,比如A1在2024-02-29 09:05:00的A值会被填充为10,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 03:38:13