Pandas从具有偏移量的组中获取最后n个值。

2024-05-16 02:42:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有数据帧(pandaspython3.5)和日期作为索引。 electricity_use是我应该预测的标签。
e、 g

          City Country  electricity_use
DATE                                   
7/1/2014     X       A             1.02
7/1/2014     Y       A             0.25
7/2/2014     X       A             1.21
7/2/2014     Y       A             0.27
7/3/2014     X       A             1.25
7/3/2014     Y       A             0.20
7/4/2014     X       A             0.97
7/4/2014     Y       A             0.43
7/5/2014     X       A             0.54
7/5/2014     Y       A             0.45
7/6/2014     X       A             1.33
7/6/2014     Y       A             0.55
7/7/2014     X       A             2.01
7/7/2014     Y       A             0.21
7/8/2014     X       A             1.11
7/8/2014     Y       A             0.34
7/9/2014     X       A             1.35
7/9/2014     Y       A             0.18
7/10/2014    X       A             1.22
7/10/2014    Y       A             0.27

当然,数据更大。
我的目标是为每一行创建组('City' 'country')上的最后3electricity_use,间隔为5天(即从5天开始取最后3个值)。日期可以是非连续的,但它们是有序的。
例如,对于最后两行,结果应该是:

^{pr2}$

因为日期是7/10/2014,而间隔是5 days,所以我们从7/5/2014开始,这些是从这个日期到每个组的最后3个值(在本例中,组是(X,A)和{}。在

我在中实现了一个循环,该循环遍历每个组,但我觉得可以用更有效的方式来完成。在


Tags: 数据city目标pandasdate间隔use标签
1条回答
网友
1楼 · 发布于 2024-05-16 02:42:48

一种简单的方法是重新建立数据帧的索引并迭代地合并n次

from datetime import datetime,timedelta

# make sure index is in datetime format
df['index'] = df.index
df1 = df.copy()

for i in range(3):
    df1['index'] = df['index'] - timedelta(5+i)
    df = df1.merge(df,left_on=['City','Country','date'],right_on=['City','Country','date'],how='left',suffixes=('','_'+str(i)))

一种更快的方法是使用shift-by并删除伪值

^{pr2}$

相关问题 更多 >