找到分钟。具有pandas / python的未来行范围的特定列中的值

问题描述 投票:0回答:2

我有以下数据:

datetime    price
2017-10-02 08:03:00 12877
2017-10-02 08:04:00 12877.5
2017-10-02 08:05:00 12879
2017-10-02 08:06:00 12875.5
2017-10-02 08:07:00 12875.5
2017-10-02 08:08:00 12878
2017-10-02 08:09:00 12878
2017-10-02 08:10:00 12878
2017-10-02 08:11:00 12881
2017-10-02 08:12:00 12882.5
2017-10-02 08:13:00 12884.5
2017-10-02 08:14:00 12882
2017-10-02 08:15:00 12880.5
2017-10-02 08:16:00 12881.5
2017-10-02 08:17:00 12879
2017-10-02 08:18:00 12879
2017-10-02 08:19:00 12880
2017-10-02 08:20:00 12878.5

我想找到分钟。 'datetime'的范围价格(范围由windows_size定义,可以是1/2/3等),使用:

df['MinPrice'] = df.ix[window_size:,'price']

这给了我窗口最后一行或使用的价格

df['MinPrice'] = df.ix[window_size:,'price'].min()

这给了我所有列的最小值。

请告知如何获得分钟。窗口声明的特定行的值。

编辑:预期结果如下:如果窗口大小为3,我想获得最小值。值为3行。所以在08:05:00我会得到12877而对于08:06:00我会得到12875.5

python pandas
2个回答
1
投票

看看pandas.DataFrame.rolling

df.rolling(window=3).apply(min).dropna()

将给出预期的结果:

datetime    price
2017-10-02  08:05:00    12877.0
2017-10-02  08:06:00    12875.5
2017-10-02  08:07:00    12875.5
2017-10-02  08:08:00    12875.5
2017-10-02  08:09:00    12875.5
2017-10-02  08:10:00    12878.0
2017-10-02  08:11:00    12878.0
2017-10-02  08:12:00    12878.0
2017-10-02  08:13:00    12881.0
2017-10-02  08:14:00    12882.0
2017-10-02  08:15:00    12880.5
2017-10-02  08:16:00    12880.5
2017-10-02  08:17:00    12879.0
2017-10-02  08:18:00    12879.0
2017-10-02  08:19:00    12879.0
2017-10-02  08:20:00    12878.5

1
投票

由于看起来你有1分钟的间隔,你可能想利用resample,这样你就可以使用datetime来定义窗口

df.resample('3T',on='datetime').min()

                             datetime    price
datetime                                        
2017-10-02 08:03:00 2017-10-02 08:03:00  12877.0
2017-10-02 08:06:00 2017-10-02 08:06:00  12875.5
2017-10-02 08:09:00 2017-10-02 08:09:00  12878.0
2017-10-02 08:12:00 2017-10-02 08:12:00  12882.0
2017-10-02 08:15:00 2017-10-02 08:15:00  12879.0
2017-10-02 08:18:00 2017-10-02 08:18:00  12878.5

要将值设置回初始数据帧,请使用transform

df['minPrice'] = df.resample('3T',on='datetime').transform('min')

             datetime    price  minPrice
0  2017-10-02 08:03:00  12877.0   12877.0
1  2017-10-02 08:04:00  12877.5   12877.0
2  2017-10-02 08:05:00  12879.0   12877.0
3  2017-10-02 08:06:00  12875.5   12875.5
4  2017-10-02 08:07:00  12875.5   12875.5
5  2017-10-02 08:08:00  12878.0   12875.5
6  2017-10-02 08:09:00  12878.0   12878.0
7  2017-10-02 08:10:00  12878.0   12878.0
8  2017-10-02 08:11:00  12881.0   12878.0
9  2017-10-02 08:12:00  12882.5   12882.0
10 2017-10-02 08:13:00  12884.5   12882.0
11 2017-10-02 08:14:00  12882.0   12882.0
12 2017-10-02 08:15:00  12880.5   12879.0
13 2017-10-02 08:16:00  12881.5   12879.0
14 2017-10-02 08:17:00  12879.0   12879.0
15 2017-10-02 08:18:00  12879.0   12878.5
16 2017-10-02 08:19:00  12880.0   12878.5
17 2017-10-02 08:20:00  12878.5   12878.5
© www.soinside.com 2019 - 2024. All rights reserved.