有趣的问题!
我有一个数据框,其中包含许多列,但相关的列是:id、event_time
这些id是可重复的。我尝试计算在每行中id发生的时间之前数据框中出现id的次数。因此,如果id = 43且event_time = 2016-01-01 12:00:00,则我想知道在此event_time之前id 43出现的所有次数。event_time已经通过pd.to_datetime()进行了格式化,但它不是索引。
这个循环解决了这个问题,但对于超过400k行的数据非常慢。
occs=[]
for ix in range(len(df)):
cur=df.iloc[[ix]]
occurrences=df[(df.id==cur.id.values[0])&
(df.event_time < cur.event_time.values[0])]
occs.append(len(occurrences))
df['total_occ']=occs
我知道肯定有更好的方法,可能需要使用group by。关键是它只能在事件发生前,并且它们的顺序不是按照时间顺序排列。
谢谢大家!
* 编辑示例数据 *
id | event_time | count
11 2016-11-09 1
8 2016-11-10 1
32 2016-11-08 0
11 2016-11-08 0
8 2016-11-11 2
8 2016-11-07 0
尽管计数将大幅增加,达到数千个......但计数是所需的输出。