Я выполнял простой пример финансовых данных, пытаясь составить классический c график подсвечника. Для этого мне нужно было рассчитать Open, Max, Min и Close для каждой единицы времени. Я решил использовать функцию resample вместе с groupby (для каждого символа). Чтобы избежать многоиндексных манипуляций, я решил использовать функцию pd.NamedAgg, чтобы упростить все:
candles = (data.set_index('trade_datetime')
.groupby('instrument_symbol')
.resample('1T')
.agg(open=pd.NamedAgg("trade_price", "first"),
max=pd.NamedAgg("trade_price", "max"),
median=pd.NamedAgg("trade_price", "median"),
min=pd.NamedAgg("trade_price", "min"),
close=pd.NamedAgg("trade_price", "last"),
std=pd.NamedAgg("trade_price", np.std),
volume=pd.NamedAgg("trade_quantity", "sum")).reset_index())
К сожалению, я получил эту ошибку:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<timed exec> in <module>
TypeError: aggregate() missing 1 required positional argument: 'func'
Я не получаю ошибка при удалении повторной выборки:
candles = (data.set_index('trade_datetime')
.groupby('instrument_symbol')
#.resample('1D')
.agg(open=pd.NamedAgg("trade_price", "first"),
max=pd.NamedAgg("trade_price", "max"),
median=pd.NamedAgg("trade_price", "median"),
min=pd.NamedAgg("trade_price", "min"),
close=pd.NamedAgg("trade_price", "last"),
std=pd.NamedAgg("trade_price", np.std),
volume=pd.NamedAgg("trade_quantity", "sum")).reset_index())
instrument_symbol open max median min close std volume
0 PETR4 31.0 31.0 30.2 28.39 30.0 0.714111 12400
Я использую pandas 1.0.1 и ниже есть несколько примеров для воспроизведения ошибки.
trade_datetime instrument_symbol trade_price trade_quantity
1166911 2019-11-04 10:32:09.737 PETR4 31.00 200
1174414 2019-11-04 11:30:14.359 PETR4 30.71 300
1208601 2019-11-04 15:23:06.619 PETR4 30.23 100
1355062 2019-11-05 17:06:03.523 PETR4 29.72 200
1260316 2019-11-06 11:11:48.144 PETR4 28.39 1100
1295823 2019-11-06 11:49:00.767 PETR4 29.50 100
1343467 2019-11-06 15:52:42.506 PETR4 29.42 100
1261615 2019-11-07 13:12:30.599 PETR4 30.05 200
1297542 2019-11-07 15:28:37.714 PETR4 30.85 600
1305454 2019-11-07 15:42:27.041 PETR4 30.90 100
1323388 2019-11-07 16:48:32.382 PETR4 30.87 100
1381162 2019-11-08 10:24:50.643 PETR4 30.20 100
1385193 2019-11-08 11:05:14.777 PETR4 30.66 9000
1423408 2019-11-08 16:46:33.172 PETR4 30.11 100
1447363 2019-11-08 17:52:57.999 PETR4 30.00 100
Старый работает синтаксис с dict со столбцами в качестве ключей и agg-функциями в качестве значений. Я знаю, что есть разные способы получить этот результат, но мне действительно нравится использовать эту новую функцию NamedAgg.
Я что-то не так делаю? Это ошибка? Я немного неохотно открываю проблему, потому что все вроде нормально.