基于排除当前记录日期的历史数据聚合特征的实现求助
解决方案
你的需求是统计排除当前记录日期的历史记录总数,也就是同一ID下,当前记录日期之前的所有记录数,同一日期的所有记录共用这个数值。你之前用cumcount()是按行累加,所以同一日期的后续行也会被计入,导致结果不符合预期。
实现步骤
- 确保
Time列转换为datetime类型,方便提取日期维度。 - 对每个
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
相关产品推荐
相关产品推荐

