簡體   English   中英

Pandas 命名聚合不適用於重采樣 agg

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM