如何向后重新采样熊猫数据帧

Ivá*_*ván 5 python resampling pandas

嗨,我正在尝试向后重新采样 Pandas DataFrame。这是我的数据框:

seconds     = np.arange(20, 700, 60)
timedeltas  = pd.to_timedelta(seconds, unit='s')
vals        = np.array([randint(-10,10) for a in range(len(seconds))])
df  = pd.DataFrame({'values': vals}, index = timedeltas)
Run Code Online (Sandbox Code Playgroud)

那么我有

In [252]: df
Out[252]: 
          values
00:00:20       8
00:01:20       4
00:02:20       5
00:03:20       9
00:04:20       7
00:05:20       5
00:06:20       5
00:07:20      -6
00:08:20      -3
00:09:20      -5
00:10:20      -5
00:11:20     -10
Run Code Online (Sandbox Code Playgroud)

In [253]: df.resample('5min').mean()
Out[253]: 
          values
00:00:20     6.6
00:05:20    -0.8
00:10:20    -7.5
Run Code Online (Sandbox Code Playgroud)

我想要的是

Out[***]: 
          values
00:01:20    6
00:06:20    valb
00:11:20    -5.8
Run Code Online (Sandbox Code Playgroud)

如果我回滚数据帧并计算从后到前的每个 bin 中的平均值,则每个新时间的值都是这些值。例如,在这种情况下,最后一个值应该是

valc = (-6-3-5-5-10)/5.
valc= -5.8
Run Code Online (Sandbox Code Playgroud)

这是最后 5 个值的平均值,第一个应该是前两个值的平均值,因为“bin”是不完整的。

阅读熊猫文档我认为我必须使用参数how='last'但在我当前版本的熊猫中这是行不通的(版本 0.20.3)。此外,我尝试使用关闭约定的选项,但我无法执行此操作。

谢谢您的帮助

小智 0

最简单的方法是按相反顺序对索引进行排序,然后重新采样以获得所需的结果:

df.sort_index(ascending=False).resample('5min').mean()
Run Code Online (Sandbox Code Playgroud)

重新采样参考- 当重新采样开始时,第一个 bin 具有最大可用长度,在本例中为 5。封闭、标签、约定参数很有帮助,但不计算从后到前的平均值。为此,请使用排序。