Ошибка при использовании Pandas
Есть данные:
| Time | Price1 | Price2 |
|---|---|---|
| 2021-03-24 19:00:00 | 1673.4 | 1624.09 |
| 2021-03-24 20:00:00 | 1637.4 | 1580.18 |
| 2021-03-24 21:00:00 | 1620.79 | 1596.42 |
| 2021-03-24 22:00:00 | 1612.93 | 1536.92 |
| 2021-03-24 23:00:00 | 1597.92 | 1575.1 |
| 2021-03-25 00:00:00 | 1597.94 | 1572.61 |
| 2021-03-25 01:00:00 | 1593.5 | 1553.12 |
| 2021-03-25 02:00:00 | 1580.59 | 1549.4 |
| 2021-03-25 03:00:00 | 1582.41 | 1560.63 |
| 2021-03-25 04:00:00 | 1582.88 | 1564.0 |
| 2021-03-25 05:00:00 | 1592.0 | 1570.59 |
| 2021-03-25 06:00:00 | 1599.0 | 1585.84 |
| 2021-03-25 07:00:00 | 1598.56 | 1572.48 |
| 2021-03-25 08:00:00 | 1604.79 | 1572.65 |
| 2021-03-25 09:00:00 | 1612.5 | 1590.72 |
| 2021-03-25 10:00:00 | 1619.0 | 1598.27 |
| 2021-03-25 11:00:00 | 1622.0 | 1592.26 |
| 2021-03-25 12:00:00 | 1601.03 | 1554.32 |
| 2021-03-25 13:00:00 | 1602.9 | 1561.69 |
| 2021-03-25 14:00:00 | 1613.68 | 1594.16 |
| 2021-03-25 15:00:00 | 1603.74 | 1579.12 |
| 2021-03-25 16:00:00 | 1605.25 | 1570.0 |
| 2021-03-25 17:00:00 | 1609.0 | 1587.0 |
| 2021-03-25 18:00:00 | 1619.0 | 1599.68 |
| 2021-03-25 19:00:00 | 1615.89 | 1600.74 |
Пытаюсь получить максимальное и минимальное значение за 3-х часовой период. Делаю так:
data=pd.concat([data.resample('180T').Price1.rolling(len(data), min_periods=3).max().dropna() , data.resample('180T').Price2.rolling(len(data), min_periods=3).min().dropna() ], axis=1, keys=['Price1', 'Price2'])
Выдает ошибку:
AttributeError: 'BinGrouper' object has no attribute '_groupings'
Как исправить ошибку? Или может есть способ считать лучше?
UPD: Изначально есть такой список:
[[1616659200000,
'1574.18',
'1622.54',
'1573.01',
'1593.36',
'421270.841',
1616673599999,
'675394628.01520',
286439,
'211827.421',
'339632713.09161',
'0'],
[1616673600000,
'1593.36',
'1615.61',
'1555.35',
'1597.11',
'703593.509',
1616687999999,
'1115403031.53798',
449625,
'351390.194',
'557119635.16550',
'0'],
[1616688000000,
'1597.18',
'1621.99',
'1572.82',
'1606.82',
'407181.319',
1616702399999,
'651268880.88711',
305126,
'205206.180',
'328315238.63720',
'0'],
[1616702400000,
'1606.83',
'1618.45',
'1577.65',
'1587.50',
'219267.376',
1616716799999,
'350660737.62624',
197251,
'105071.391',
'168118894.69875',
'0'],
[1616716800000,
'1587.44',
'1630.65',
'1587.03',
'1619.63',
'265208.754',
1616731199999,
'429206574.64369',
214865,
'136382.340',
'220709131.72386',
'0'],
[1616731200000,
'1619.60',
'1626.99',
'1611.20',
'1619.87',
'110868.153',
1616745599999,
'179569505.70138',
99601,
'53066.606',
'85967606.12833',
'0'], . . .]
И оставляю только две цены и время:
data=pd.DataFrame(data, columns=["TimeOpen", "Open", "high", "low", "Close", "Quantity", "TimeClose", "Amount", "Deals","TBB", "TBQ", "Ignore"])
data.Time=data['TimeOpen'].astype(str).str[:-3]
data.drop(['Open', 'Close','Quantity', 'TimeClose', "Amount", "Deals","TBB", "TBQ", "Ignore"], axis=1, inplace=True)
data["TimeOpen"] = pd.to_datetime(data["TimeOpen"], unit="s")
Почему-то используя
data.rolling("3H", min_periods=3, on="TimeOpen").max()
выдает
0 2020-10-19 00:00:00 NaN NaN
1 2020-10-19 04:00:00 NaN NaN
2 2020-10-19 08:00:00 NaN NaN
3 2020-10-19 12:00:00 NaN NaN
4 2020-10-19 16:00:00 NaN NaN
.. ... ... ...
945 2021-03-25 12:00:00 NaN NaN
946 2021-03-25 16:00:00 NaN NaN
947 2021-03-25 20:00:00 NaN NaN
948 2021-03-26 00:00:00 NaN NaN
949 2021-03-26 04:00:00 NaN NaN
Мне нужно получить скользящий максимум в столбике high и скользящий минимум в столбике low за 3-х часовой период.
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Если я правильно понял вопрос:
In [125]: df.resample("3H", on="Time").max()
Out[125]:
Time Price1 Price2
Time
2021-03-24 18:00:00 2021-03-24 20:00:00 1673.40 1624.09
2021-03-24 21:00:00 2021-03-24 23:00:00 1620.79 1596.42
2021-03-25 00:00:00 2021-03-25 02:00:00 1597.94 1572.61
2021-03-25 03:00:00 2021-03-25 05:00:00 1592.00 1570.59
2021-03-25 06:00:00 2021-03-25 08:00:00 1604.79 1585.84
2021-03-25 09:00:00 2021-03-25 11:00:00 1622.00 1598.27
2021-03-25 12:00:00 2021-03-25 14:00:00 1613.68 1594.16
2021-03-25 15:00:00 2021-03-25 17:00:00 1609.00 1587.00
2021-03-25 18:00:00 2021-03-25 19:00:00 1619.00 1600.74
Или так если речь идет о скользящем окне:
In [128]: df.rolling("3H", min_periods=3, on="Time").max()
Out[128]:
Time Price1 Price2
0 2021-03-24 19:00:00 NaN NaN
1 2021-03-24 20:00:00 NaN NaN
2 2021-03-24 21:00:00 1673.40 1624.09
3 2021-03-24 22:00:00 1637.40 1596.42
4 2021-03-24 23:00:00 1620.79 1596.42
5 2021-03-25 00:00:00 1612.93 1575.10
6 2021-03-25 01:00:00 1597.94 1575.10
7 2021-03-25 02:00:00 1597.94 1572.61
8 2021-03-25 03:00:00 1593.50 1560.63
9 2021-03-25 04:00:00 1582.88 1564.00
10 2021-03-25 05:00:00 1592.00 1570.59
11 2021-03-25 06:00:00 1599.00 1585.84
12 2021-03-25 07:00:00 1599.00 1585.84
13 2021-03-25 08:00:00 1604.79 1585.84
14 2021-03-25 09:00:00 1612.50 1590.72
15 2021-03-25 10:00:00 1619.00 1598.27
16 2021-03-25 11:00:00 1622.00 1598.27
17 2021-03-25 12:00:00 1622.00 1598.27
18 2021-03-25 13:00:00 1622.00 1592.26
19 2021-03-25 14:00:00 1613.68 1594.16
20 2021-03-25 15:00:00 1613.68 1594.16
21 2021-03-25 16:00:00 1613.68 1594.16
22 2021-03-25 17:00:00 1609.00 1587.00
23 2021-03-25 18:00:00 1619.00 1599.68
24 2021-03-25 19:00:00 1619.00 1600.74