我有一个DataFrame,如下所示:
data = [[99330,12,122],
[1123,1230,1287],
[123,101,812739],
[1143,12301230,252],
[234,342,4546],
[2445,3453,3457],
[7897,8657,5675],
[46,5675,453],
[76,484,3735],
[363,93,4568],
[385,568,367],
[458,846,4847],
[574,45747,658468],
[57457,46534,4675]]
df1 = pd.DataFrame(data, index=['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04',
'2022-01-05', '2022-01-06', '2022-01-07', '2022-01-08',
'2022-01-09', '2022-01-10', '2022-01-11', '2022-01-12',
'2022-01-13', '2022-01-14'],
columns=['col_A', 'col_B', 'col_C'])
df1.index = pd.to_datetime(df1.index)
df1.resample('1D').last().rolling(7).last()
最后一行给出了以下错误:AttributeError: 'Rolling' object has no attribute 'last'
我想做的是在滚动的基础上(7、30、90天(对数据进行重新采样。
有没有一种方法可以在不使用许多循环的情况下做到这一点?
您应用last
,就好像rolling
给了您数据帧一样;它没有(因为它实际上是"不完整的",正如你在下面看到的那样(。
一般的提示是,您可以获取从上一步中获得的任何内容,并在其中使用help
。在这种情况下,
x = df1.resample('1D').last().rolling(7)
help(x)
它为您提供了一个非常广泛的手册。
你的问题缺少的是,你实际上没有精确地指定你想要滚动的。你想要滚动均值吗?这会提示您希望对滚动数据使用.mean()
。
更具体地说,在这种情况下,使用timedelta可能是最有帮助的,这将使代码更加清晰,并帮助您处理角落案例,而不是使用整数计数
rolled_df = df1.rolling(datetime.timedelta(days=7)).mean()