我有一个数据框,其中每一行都是网页访问和访问的日期时间。例如:

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的重复次数(这很容易),我希望每一行直到当前行为止的重复次数。

没有昂贵的for循环怎么办?我有数百万行。

最佳答案

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

关于python - 计算 Pandas 中先前发现的重复项的数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36007950/

10-16 12:05