[英]Pandas named aggregation not working with resample agg
我正在執行一個簡單的財務數據示例,試圖制作一個經典的燭台圖。 為此,我必須計算每個時間單位的 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 函數。
難道我做錯了什么? 這是一個錯誤嗎? 我有點不願意打開一個問題,因為一切似乎都很好。
這是一個錯誤。 在 pandas >=1.4.0 中解決。 嘗試 <1.4.0 的解決方法:func = None。
.agg(func = None, open=pd.NamedAgg("trade_price", "first") ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.