如何使用days作为pandas rolling_apply函数的窗口

E.K*_*.K. 9 python time-series pandas

我有一个不规则日期的熊猫数据帧.有没有办法使用7天作为移动窗口来计算中位数绝对偏差,中位数等.?我觉得我可以以某种方式使用,pandas.rolling_apply但它不会占用窗口参数的不规则间隔日期.我发现了一个类似的帖子/sf/answers/2117081361/,我正在尝试创建我的自定义功能,但仍然无法弄清楚..任何人都可以帮忙吗?

import pandas as pd
from datetime import datetime

person = ['A','B','C','B','A','C','A','B','C','A',]
ts = [
    datetime(2000, 1, 1),
    datetime(2000, 1, 1),
    datetime(2000, 1, 10),
    datetime(2000, 1, 20),
    datetime(2000, 1, 25),
    datetime(2000, 1, 30),
    datetime(2000, 2, 8),
    datetime(2000, 2, 12),
    datetime(2000, 2, 17),
    datetime(2000, 2, 20),
]
score = [9,2,1,3,8,4,2,3,1,9]
df = pd.DataFrame({'ts': ts, 'person': person, 'score': score})
Run Code Online (Sandbox Code Playgroud)

df看起来像这样

    person  score   ts
0   A       9       2000-01-01
1   B       2       2000-01-01
2   C       1       2000-01-10
3   B       3       2000-01-20
4   A       8       2000-01-25
5   C       4       2000-01-30
6   A       2       2000-02-08
7   B       3       2000-02-12
8   C       1       2000-02-17
9   A       9       2000-02-20
Run Code Online (Sandbox Code Playgroud)

Bri*_*uey 5

您可以使用时间增量来选择窗口中的行,然后使用apply来遍历每一行并聚合:

>>> from datetime import timedelta
>>> delta = timedelta(days=7)
>>> df_score_mean = df.apply(lambda x: np.mean(df['score'][df['ts'] <= x['ts'] + delta]), axis=1)
0    5.500000
1    5.500000
2    4.000000
3    4.600000
4    4.500000
5    4.500000
6    4.555556
7    4.200000
8    4.200000
9    4.200000
Run Code Online (Sandbox Code Playgroud)