简体   繁体   English

pandas resample / TimeGrouper中的错误

[英]Bug in pandas resample/TimeGrouper

Here is a reproducible example: 这是一个可重复的例子:

from pandas import DataFrame, Timestamp, TimeGrouper

i = [Timestamp('2015-10-07 03:50:01.543999+0000', tz='UTC'), Timestamp('2015-10-07 03:50:02.504000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:02.180000+0000', tz='UTC'), Timestamp('2015-10-07 03:50:04.380000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:14.744000+0000', tz='UTC'), Timestamp('2015-10-07 03:50:17.380000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:19.860000+0000', tz='UTC'), Timestamp('2015-10-07 03:50:19.996000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:32.823999+0000', tz='UTC'), Timestamp('2015-10-07 03:50:37.867999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:37.867999+0000', tz='UTC'), Timestamp('2015-10-07 03:50:37.867999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:37.867999+0000', tz='UTC'), Timestamp('2015-10-07 03:50:37.867999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:37.867999+0000', tz='UTC'), Timestamp('2015-10-07 03:50:37.867999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:37.867999+0000', tz='UTC'), Timestamp('2015-10-07 03:50:37.867999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:37.867999+0000', tz='UTC'), Timestamp('2015-10-07 03:50:37.867999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:37.867999+0000', tz='UTC'), Timestamp('2015-10-07 03:50:37.867999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:37.867999+0000', tz='UTC'), Timestamp('2015-10-07 03:50:37.867999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:37.867999+0000', tz='UTC'), Timestamp('2015-10-07 03:50:37.867999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:37.867999+0000', tz='UTC'), Timestamp('2015-10-07 03:50:37.867999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:37.867999+0000', tz='UTC'), Timestamp('2015-10-07 03:50:37.867999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:41.956000+0000', tz='UTC'), Timestamp('2015-10-07 03:50:41.956000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:46.584000+0000', tz='UTC'), Timestamp('2015-10-07 03:50:46.584000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:46.584000+0000', tz='UTC'), Timestamp('2015-10-07 03:50:46.584000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:46.584000+0000', tz='UTC'), Timestamp('2015-10-07 03:50:46.584000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:46.584000+0000', tz='UTC'), Timestamp('2015-10-07 03:50:46.828000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:46.828000+0000', tz='UTC'), Timestamp('2015-10-07 03:50:49.047999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:53.668000+0000', tz='UTC'), Timestamp('2015-10-07 03:50:53.668000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:55.675999+0000', tz='UTC'), Timestamp('2015-10-07 03:50:55.675999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:55.675999+0000', tz='UTC'), Timestamp('2015-10-07 03:50:55.675999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:50:55.464000+0000', tz='UTC'), Timestamp('2015-10-07 03:50:57.123999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:02.127999+0000', tz='UTC'), Timestamp('2015-10-07 03:51:02.327999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:07.484000+0000', tz='UTC'), Timestamp('2015-10-07 03:51:07.484000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'), Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'), Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'), Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'), Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'), Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'), Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'), Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'), Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'), Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'), Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'), Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'), Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'), Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'), Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'), Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'), Timestamp('2015-10-07 03:51:08.504000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:08.520000+0000', tz='UTC'), Timestamp('2015-10-07 03:51:08.119999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:08.119999+0000', tz='UTC'), Timestamp('2015-10-07 03:51:08.119999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:08.119999+0000', tz='UTC'), Timestamp('2015-10-07 03:51:08.119999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:08.119999+0000', tz='UTC'), Timestamp('2015-10-07 03:51:08.119999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:08.119999+0000', tz='UTC'), Timestamp('2015-10-07 03:51:08.119999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:15.547999+0000', tz='UTC'), Timestamp('2015-10-07 03:51:15.547999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:15.547999+0000', tz='UTC'), Timestamp('2015-10-07 03:51:16.996000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:16.996000+0000', tz='UTC'), Timestamp('2015-10-07 03:51:23.888000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:24.671999+0000', tz='UTC'), Timestamp('2015-10-07 03:51:26.719999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:51:26.719999+0000', tz='UTC'), Timestamp('2015-10-07 03:51:29.924000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:00.372000+0000', tz='UTC'), Timestamp('2015-10-07 03:52:00.372000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:00.372000+0000', tz='UTC'), Timestamp('2015-10-07 03:52:00.372000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:02.900000+0000', tz='UTC'), Timestamp('2015-10-07 03:52:02.900000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:02.900000+0000', tz='UTC'), Timestamp('2015-10-07 03:52:02.900000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:05.883999+0000', tz='UTC'), Timestamp('2015-10-07 03:52:05.883999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:05.883999+0000', tz='UTC'), Timestamp('2015-10-07 03:52:05.883999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:05.883999+0000', tz='UTC'), Timestamp('2015-10-07 03:52:05.888000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:05.888000+0000', tz='UTC'), Timestamp('2015-10-07 03:52:29.119999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:31.319999+0000', tz='UTC'), Timestamp('2015-10-07 03:52:31.319999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:31.319999+0000', tz='UTC'), Timestamp('2015-10-07 03:52:31.319999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:31.319999+0000', tz='UTC'), Timestamp('2015-10-07 03:52:31.319999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:31.319999+0000', tz='UTC'), Timestamp('2015-10-07 03:52:31.319999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:31.319999+0000', tz='UTC'), Timestamp('2015-10-07 03:52:33.676000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:33.987999+0000', tz='UTC'), Timestamp('2015-10-07 03:52:33.987999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:33.248000+0000', tz='UTC'), Timestamp('2015-10-07 03:52:43.288000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:43.288000+0000', tz='UTC'), Timestamp('2015-10-07 03:52:43.288000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:45.068000+0000', tz='UTC'), Timestamp('2015-10-07 03:52:45.068000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:45.068000+0000', tz='UTC'), Timestamp('2015-10-07 03:52:45.068000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:48.259999+0000', tz='UTC'), Timestamp('2015-10-07 03:52:48.259999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:57.196000+0000', tz='UTC'), Timestamp('2015-10-07 03:52:57.196000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:57.196000+0000', tz='UTC'), Timestamp('2015-10-07 03:52:57.196000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:52:57.196000+0000', tz='UTC'), Timestamp('2015-10-07 03:52:59.743999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:53:00.244000+0000', tz='UTC'), Timestamp('2015-10-07 03:53:00.248000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:53:00.356000+0000', tz='UTC'), Timestamp('2015-10-07 03:53:00.380000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:53:03.012000+0000', tz='UTC'), Timestamp('2015-10-07 03:53:14.055999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:53:18.447999+0000', tz='UTC'), Timestamp('2015-10-07 03:53:18.447999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:53:18.472000+0000', tz='UTC'), Timestamp('2015-10-07 03:53:18.472000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:53:27.259999+0000', tz='UTC'), Timestamp('2015-10-07 03:53:30.831999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:53:30.831999+0000', tz='UTC'), Timestamp('2015-10-07 03:53:30.831999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:53:30.831999+0000', tz='UTC'), Timestamp('2015-10-07 03:53:30.831999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:53:30.831999+0000', tz='UTC'), Timestamp('2015-10-07 03:53:30.840000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:53:30.840000+0000', tz='UTC'), Timestamp('2015-10-07 03:53:31.631999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:53:41.776000+0000', tz='UTC'), Timestamp('2015-10-07 03:53:44.119999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:53:52.319999+0000', tz='UTC'), Timestamp('2015-10-07 03:53:52.319999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:53:54.239999+0000', tz='UTC'), Timestamp('2015-10-07 03:53:54.243999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:53:54.243999+0000', tz='UTC'), Timestamp('2015-10-07 03:53:54.243999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:53:54.311999+0000', tz='UTC'), Timestamp('2015-10-07 03:54:02.648000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:02.648000+0000', tz='UTC'), Timestamp('2015-10-07 03:54:02.648000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:02.648000+0000', tz='UTC'), Timestamp('2015-10-07 03:54:02.648000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:02.648000+0000', tz='UTC'), Timestamp('2015-10-07 03:54:02.648000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:02.648000+0000', tz='UTC'), Timestamp('2015-10-07 03:54:02.648000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:02.648000+0000', tz='UTC'), Timestamp('2015-10-07 03:54:04.268000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:04.268000+0000', tz='UTC'), Timestamp('2015-10-07 03:54:04.268000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:05.980000+0000', tz='UTC'), Timestamp('2015-10-07 03:54:08.959999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:08.959999+0000', tz='UTC'), Timestamp('2015-10-07 03:54:09.144000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:09.223999+0000', tz='UTC'), Timestamp('2015-10-07 03:54:09.223999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:09.223999+0000', tz='UTC'), Timestamp('2015-10-07 03:54:10.828000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:10.828000+0000', tz='UTC'), Timestamp('2015-10-07 03:54:10.828000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:10.828000+0000', tz='UTC'), Timestamp('2015-10-07 03:54:10.828000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:10.828000+0000', tz='UTC'), Timestamp('2015-10-07 03:54:10.828000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:10.828000+0000', tz='UTC'), Timestamp('2015-10-07 03:54:12.751999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:15.480000+0000', tz='UTC'), Timestamp('2015-10-07 03:54:15.480000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:15.480000+0000', tz='UTC'), Timestamp('2015-10-07 03:54:15.484000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:15.484000+0000', tz='UTC'), Timestamp('2015-10-07 03:54:15.484000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:15.484000+0000', tz='UTC'), Timestamp('2015-10-07 03:54:15.484000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:15.484000+0000', tz='UTC'), Timestamp('2015-10-07 03:54:16.963999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:16.963999+0000', tz='UTC'), Timestamp('2015-10-07 03:54:17.460000+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:34.519999+0000', tz='UTC'), Timestamp('2015-10-07 03:54:34.519999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:35.319999+0000', tz='UTC'), Timestamp('2015-10-07 03:54:35.319999+0000', tz='UTC'),
 Timestamp('2015-10-07 03:54:35.319999+0000', tz='UTC')]

p = [1965.25, 1965.25, 1965.25, 1965.25, 1965.25, 1965.25, 1965.25, 1965.25, 1965.25, 1965.5,
 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5,
 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5,
 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5,
 1965.5, 1965.75, 1965.75, 1965.75, 1965.75, 1965.5, 1965.5, 1965.75, 1965.75, 1965.75,
 1965.75, 1965.75, 1965.75, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5,
 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5,
 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5,
 1965.5, 1965.5, 1965.25, 1965.25, 1965.25, 1965.25, 1965.25, 1965.25, 1965.25, 1965.25,
 1965.25, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.75, 1965.75, 1965.5,
 1965.75, 1965.75, 1965.75,  1965.75, 1965.75, 1965.75, 1965.75, 1965.75, 1965.75, 1965.75,
 1965.75, 1965.75, 1965.75, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5,
 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5,
 1965.25, 1965.25, 1965.25, 1965.25, 1965.25, 1965.25, 1965.5, 1965.5, 1965.5, 1965.5,
 1965.5, 1965.75, 1965.5, 1965.75, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5, 1965.5,
 1965.5, 1965.5, 1965.25, 1965.25, 1965.25, 1965.25, 1965.25, 1965.25, 1965.25, 1965.25,
 1965.5, 1965.25, 1965.5, 1965.25, 1965.25, 1965.25, 1965.25, 1965.25, 1965.25, 1965.5,
 1965.0, 1965.0, 1965.0, 1965.0, 1965.0, 1965.0, 1964.75, 1964.75, 1964.75, 1964.75,
 1964.75, 1964.75, 1964.75, 1964.75, 1964.5, 1964.5, 1964.5, 1964.75, 1964.75, 1964.75,
 1965.0, 1965.0, 1965.0, 1965.0, 1965.0, 1965.0, 1965.0, 1965.0, 1965.0, 1965.25, 1965.25,
 1965.25, 1965.25, 1965.25, 1965.25, 1965.25, 1965.25, 1965.25, 1965.0, 1965.0, 1965.25,
 1965.25, 1965.25, 1965.25, 1965.25, 1965.25]

Now let's create the DataFrame: 现在让我们创建DataFrame:

df = DataFrame(data=p, index=i, columns=['price'])

What data looks like for the minute 03:54 : 03:54分钟的数据是什么样的:

df[df.index >= Timestamp('2015-10-07 03:54:00+00:00')].head(12)

                                    price
2015-10-07 03:54:02.648000+00:00  1965.00
2015-10-07 03:54:02.648000+00:00  1965.00
2015-10-07 03:54:02.648000+00:00  1965.00
2015-10-07 03:54:02.648000+00:00  1965.00
2015-10-07 03:54:02.648000+00:00  1965.00
2015-10-07 03:54:02.648000+00:00  1965.00
2015-10-07 03:54:02.648000+00:00  1964.75
2015-10-07 03:54:02.648000+00:00  1964.75
2015-10-07 03:54:02.648000+00:00  1964.75
2015-10-07 03:54:02.648000+00:00  1964.75
2015-10-07 03:54:04.268000+00:00  1964.75
2015-10-07 03:54:04.268000+00:00  1964.75

The first price is 1965.00 . 第一个价格是1965.00 Now let's create 1-minute bars using pandas resample method: 现在让我们使用pandas resample方法创建1分钟的条形图:

df.resample(rule='1Min', how='ohlc', closed='left', label='left')

                             price                           
                              open     high      low    close
2015-10-07 03:50:00+00:00  1965.25  1965.75  1965.25  1965.50
2015-10-07 03:51:00+00:00  1965.75  1965.75  1965.25  1965.50
2015-10-07 03:52:00+00:00  1965.75  1965.75  1965.25  1965.75
2015-10-07 03:53:00+00:00  1965.50  1965.75  1965.25  1965.50
2015-10-07 03:54:00+00:00  1964.75  1965.25  1964.50  1965.25

The open price is 1964.75 when it should be 1965.00 at 03:54 . 开盘价是1964.75 ,应该是1965.0003:54

Adding a row column shows the issue perfectly: 添加行列可以完美地显示问题:

df['row'] = range(1, df.shape[0] + 1)
grouped = df.groupby(TimeGrouper(freq='1Min', closed='left', label='left'))
grouped.get_group(Timestamp('2015-10-07 03:54:00+00:00')).head(12)
                                    price  row
2015-10-07 03:54:02.648000+00:00  1964.75  189
2015-10-07 03:54:02.648000+00:00  1964.75  188
2015-10-07 03:54:02.648000+00:00  1964.75  187
2015-10-07 03:54:02.648000+00:00  1964.75  186
2015-10-07 03:54:02.648000+00:00  1965.00  185
2015-10-07 03:54:02.648000+00:00  1965.00  181
2015-10-07 03:54:02.648000+00:00  1965.00  183
2015-10-07 03:54:02.648000+00:00  1965.00  182
2015-10-07 03:54:02.648000+00:00  1965.00  180
2015-10-07 03:54:02.648000+00:00  1965.00  184
2015-10-07 03:54:04.268000+00:00  1964.75  190
2015-10-07 03:54:04.268000+00:00  1964.75  191

The class TimeGrouper changes the order of the rows when the timestamp is identical. TimeGrouper类在时间戳相TimeGrouper更改行的顺序。

A temporary solution is to sort each group by the row column before applying the ohlc transformation. 临时解决方案是在应用ohlc转换之前按行列对每个组进行排序。

Thanks for looking into it! 感谢您的关注!

Following code may work for you. 以下代码可能适合您。

df = DataFrame(data=p, index=i, columns=['price'])
df = df.reset_index().drop_duplicates(subset='index').set_index('index')

df.resample(rule='1Min', how='ohlc', closed='left', label='left')

it shows o/p as 它显示o / p为

                            price
                            open    high    low     close
index               
2015-10-07 03:50:00+00:00   1965.25 1965.75 1965.25 1965.50
2015-10-07 03:51:00+00:00   1965.75 1965.75 1965.25 1965.50
2015-10-07 03:52:00+00:00   1965.75 1965.75 1965.25 1965.75
2015-10-07 03:53:00+00:00   1965.50 1965.75 1965.25 1965.50
2015-10-07 03:54:00+00:00   1965.00 1965.25 1964.50 1965.25

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM