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)
您可以使用时间增量来选择窗口中的行,然后使用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)