小编Sam*_*old的帖子

如何有效地计算熊猫时间序列中的滚动唯一计数?

我有一系列时间访问建筑物的人.每个人都有一个唯一的身份证.对于时间序列中的每条记录,我想知道过去365天内访问建筑物的唯一人数(即滚动的唯一人数,窗口为365天).

pandas似乎没有用于此计算的内置方法.当存在大量唯一访问者和/或大窗口时,计算变得计算密集.(实际数据大于此示例.)

有没有比我在下面做的更好的计算方法?我不确定为什么我制作的快速方法windowed_nunique(在"速度测试3"下)偏离1.

谢谢你的帮助!

相关链接:

初始化

In [1]:

# Import libraries.
import pandas as pd
import numba
import numpy as np
Run Code Online (Sandbox Code Playgroud)

In [2]:

# Create data of people visiting a building.

np.random.seed(seed=0)
dates = pd.date_range(start='2010-01-01', end='2015-01-01', freq='D')
window = 365 # days
num_pids = 100
probs = np.linspace(start=0.001, stop=0.1, num=num_pids)

df = pd\
    .DataFrame(
        data=[(date, pid)
              for (pid, prob) in zip(range(num_pids), probs)
              for date in np.compress(np.random.binomial(n=1, p=prob, size=len(dates)), …
Run Code Online (Sandbox Code Playgroud)

python time-series distinct-values pandas rolling-computation

7
推荐指数
1
解决办法
3272
查看次数