我有以下数据:
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
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分钟的间隔,你可能想利用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