我正在为ML准备一个数据集,并希望创建诸如“最后3小时的雨”、“最后12小时的雨”、“最后24小时的雨”等特性。我知道如何使用移位函数(比如“同一时间的温度”),但是如何正确有效地将来自移位范围(如shift-1 + shift-2 + shift-3)的值相加。
例如,让我们使用这种简化的数据格式:
np.random.seed(3)
rng = pd.date_range('2021-01-01', periods=10, freq='D')
val = np.random.randint(10, size=(1,10)).ravel()
test = pd.DataFrame({ 'Date': rng, 'Val' : val})
test
Date Val
0 2021-01-01 8
1 2021-01-02 9
2 2021-01-03 3
3 2021-01-04 8
4 2021-01-05 8
5 2021-01-06 0
6 2021-01-07 5
7 2021-01-08 3
8 2021-01-09 9
9 2021-01-10 9现在假设我想创建一个新的列,其中我总结了三天前的Val (在最终数据中将有多个时间范围)。列last3d如下所示:
Date Val last3d
0 2021-01-01 8 NaN
1 2021-01-02 9 NaN
2 2021-01-03 3 NaN
3 2021-01-04 8 20.0
4 2021-01-05 8 20.0
5 2021-01-06 0 19.0
6 2021-01-07 5 16.0
7 2021-01-08 3 13.0
8 2021-01-09 9 8.0
9 2021-01-10 9 17.0发布于 2021-12-21 23:58:10
这将在一行中解决它,并返回带有列的dataframe对象。
test.assign(last3d=lambda d: d["Val"].rolling(3).sum().shift())发布于 2021-12-21 21:21:34
test["last3d"]=test["Val"].rolling(3).sum()
test["last3d"]=test["last3d"].shift(1)
test
Date Val last3d
0 2021-01-01 8 NaN
1 2021-01-02 9 NaN
2 2021-01-03 3 NaN
3 2021-01-04 8 20.0
4 2021-01-05 8 20.0
5 2021-01-06 0 19.0
6 2021-01-07 5 16.0
7 2021-01-08 3 13.0
8 2021-01-09 9 8.0
9 2021-01-10 9 17.0https://stackoverflow.com/questions/70441585
复制相似问题