有趣的问题!
我有一个包含许多列的数据框,但相关的是: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.关键是它必须是event_time之前的唯一时间,并且它们不是有序的.
感谢大家!
*编辑样本数据*
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
解决方法:
我想这可能就是你所追求的:
#sort df by id and datetime
df.sort_values(['id','event_time'],inplace=True)
#add cumulative count for each id.
df['count'] = df.groupby('id').cumcount()
df
Out[1114]:
id event_time count
5 8 2016-11-07 0
1 8 2016-11-10 1
4 8 2016-11-11 2
3 11 2016-11-08 0
0 11 2016-11-09 1
2 32 2016-11-08 0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。