微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – Pandas Group by和sum by行列出的时间

有趣的问题!

我有一个包含许多列的数据框,但相关的是: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] 举报,一经查实,本站将立刻删除。

相关推荐