2014-05-22 88 views
0

我对Python的大熊猫的问题挣扎,我有这代表了网站上连接一个数据帧:加快熊猫循环

No.  IDs  date     duration_since_last_visit 
1  4678  2012-11-30 23:59:59    0 
2  4703  2012-11-30 23:59:23    0 
3  4678  2012-11-30 23:58:46    73s 
4  5803  2012-11-30 23:58:19    0 
5  4678  2012-11-30 23:58:07    39s 

我试图找到一种方法来知道的平均时间访问每个ID号码。我没做到这一点感谢:

for i in df['IDs'].values: 
    report['mean_time_visits']=report[report['IDs']==i].duration_since_last_visit.mean() 

但我的阵列有35万行,结果取得了有史以来计算,我想知道如果我做错了什么,如果有一种方法可以做这个任务快

回答

2

无需循环。

In [12]: df.groupby('IDs')['duration_since_last_visit'].mean() 
Out[12]: 
IDs 
4678 37.333333 
4703  0.000000 
5803  0.000000 
Name: duration_since_last_visit, dtype: float64 

你会发现矢量化操作在pandas/numpy中效率更高。

+0

谢谢!它确实要快得多 – user3661305

+2

这不仅仅是矢量化:这是算法复杂度的显着降低,将其降至O(N)。 – DSM