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

基于排除当前记录日期的历史数据聚合特征的实现求助

解决方案

你的需求是统计排除当前记录日期的历史记录总数,也就是同一ID下,当前记录日期之前的所有记录数,同一日期的所有记录共用这个数值。你之前用cumcount()是按行累加,所以同一日期的后续行也会被计入,导致结果不符合预期。

实现步骤

  1. 确保Time列转换为datetime类型,方便提取日期维度。
  2. 对每个ID+日期分组,取该组内最小的Cum Count值——这个最小值就是该日期之前的历史记录总数,将其赋值给该组所有行即可得到期望结果。

完整代码

import pandas as pd

# 转换Time列为datetime类型(如果还未处理)
df['Time'] = pd.to_datetime(df['Time'])

# 生成你原有的Cum Count列
df['Cum Count'] = df.sort_values('Time').groupby(['ID']).cumcount()

# 提取日期部分用于分组
df['Date'] = df['Time'].dt.date

# 生成期望结果:同一ID和日期下共享最小的Cum Count值
df['期望结果'] = df.groupby(['ID', 'Date'])['Cum Count'].transform('min')

原理说明

cumcount()是按行递增计数的,每个日期的第一条记录的Cum Count正好等于该日期之前所有历史记录的总数(因为从0开始计数)。同一日期的后续记录不需要额外累加,所以取分组内的最小值就能让同一日期的所有行共享这个历史计数,完美匹配你的期望结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:45:04