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

Python DataFrame按日期滚动求和报错:KeyError与重复问题排查

解决员工交易数据滚动求和的KeyError及重复索引问题

错误原因分析

  • KeyError: 'EMPLOYEE ID':要么是把TRANSACTION DATE设为索引后,分组所需的列被移出了数据框常规列;要么是列名拼写/大小写和数据实际列名不匹配(比如数据里是小写employee id,代码里用了大写)。
  • 重复索引错误:将日期设为索引时,同一日期存在多条交易记录,导致索引重复,后续分组或滚动操作触发报错。

分步解决方案

1. 数据预处理(避开索引陷阱)

不要直接把日期列设为索引,先转成datetime格式,再按分组键+日期排序——这是滚动窗口计算的必要前提:

import pandas as pd

# 读入交易数据
df = pd.read_csv('你的交易数据文件.csv')

# 将日期列转换为datetime格式,格式根据你的实际数据调整,比如'%Y/%m/%d'
df['TRANSACTION DATE'] = pd.to_datetime(df['TRANSACTION DATE'], format='%Y-%m-%d')

# 按分组字段+日期排序,确保滚动计算的顺序正确
df = df.sort_values(by=['EMPLOYEE ID', 'ACCOUNT EMAIL ADDRESS', 'ACCOUNT NUMBER', 'MERCHANT NAME', 'TRANSACTION DATE'])

2. 正确分组计算10天滚动总和

用groupby指定全部分组键,滚动窗口计算时通过on='TRANSACTION DATE'指定日期列,无需修改索引:

# 定义分组字段列表
group_cols = ['EMPLOYEE ID', 'ACCOUNT EMAIL ADDRESS', 'ACCOUNT NUMBER', 'MERCHANT NAME']

# 计算过去10天(包含当前交易当天)的交易金额总和
df['ROLLING_10D_TOTAL'] = df.groupby(group_cols).rolling(
    window='10D',
    on='TRANSACTION DATE',
    closed='both'
)['TRANSACTION AMOUNT'].sum().reset_index(drop=True)

额外排查点

  • 核对列名:直接查看数据,确认EMPLOYEE ID、TRANSACTION AMOUNT等列名完全匹配,包括空格、大小写细节。
  • 去重处理:如果同一分组+同一日期存在完全重复的交易记录,先去重再计算:
    df = df.drop_duplicates(subset=group_cols + ['TRANSACTION DATE', 'TRANSACTION AMOUNT'], keep='first')
    
  • 调整窗口范围:若需要“过去10天不含当天”,将closed='both'改为closed='left'。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.03 14:05:55