2016-03-15 64 views
1

我有一個數據幀,其中每一行是網頁訪問和訪問的日期時間。例如:以前在熊貓中發現重複次數的計數

from datetime import datetime 
import pandas as pd 
df = pd.DataFrame({'idvisitor': [1, 2, 3, 2, 4, 1, 1], 
        'dt': pd.date_range(start=datetime(2016, 1, 1), periods=7)}) 
print(df) 

現在,通過日期時間排序後(該示例數據幀已經被排序)我要添加的列,其中的值是與先前觀察到的相同idvisitor元件的數量。即有多少次我們之前見過某個idvisitor的用戶。

輸出示例:

  dt idvisitor prev_visits 
0 2016-01-01   1   0 
1 2016-01-02   2   0 
2 2016-01-03   3   0 
3 2016-01-04   2   1 
4 2016-01-05   4   0 
5 2016-01-06   1   1 
6 2016-01-07   1   2 

請注意,我不想算了算(這是相當容易)的一定idvisitor副本的數目,我想重複的數量上升到目前的行,爲每一行。

如何在沒有昂貴的迴路的情況下完成這項工作?我有數百萬行。

回答

2

groupby關於 'idvisitor',並呼籲cumcount

In [29]: 
df['prev_count'] = df.groupby('idvisitor').cumcount() 
df 

Out[29]: 
      dt idvisitor prev_count 
0 2016-01-01   1   0 
1 2016-01-02   2   0 
2 2016-01-03   3   0 
3 2016-01-04   2   1 
4 2016-01-05   4   0 
5 2016-01-06   1   1 
6 2016-01-07   1   2