首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫创建新的列,从最后的x天开始。

熊猫创建新的列,从最后的x天开始。
EN

Stack Overflow用户
提问于 2021-12-21 21:05:14
回答 2查看 233关注 0票数 0

我正在为ML准备一个数据集,并希望创建诸如“最后3小时的雨”、“最后12小时的雨”、“最后24小时的雨”等特性。我知道如何使用移位函数(比如“同一时间的温度”),但是如何正确有效地将来自移位范围(如shift-1 + shift-2 + shift-3)的值相加。

例如,让我们使用这种简化的数据格式:

代码语言:javascript
复制
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如下所示:

代码语言:javascript
复制
    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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-21 23:58:10

这将在一行中解决它,并返回带有列的dataframe对象。

代码语言:javascript
复制
test.assign(last3d=lambda d: d["Val"].rolling(3).sum().shift())
票数 1
EN

Stack Overflow用户

发布于 2021-12-21 21:21:34

代码语言:javascript
复制
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.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70441585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档