我有一个数据框,其中每一行都是网页访问和访问的日期时间。例如:
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
的元素数量。 IE。我们之前有多少次看到具有特定 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
的重复项数(这相当简单),我希望计算每个 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/