我想使用熊貓的重採樣函數,但應用我自己的自定義函數。我面臨的問題是自定義函數返回一個熊貓數據框而不是單個數組。當累計函數返回數據幀時,熊貓重採樣
下面的例子說明我的問題:
>>> import pandas as pd
>>> import numpy as np
>>> def f(data):
... return ((1+data).cumprod(axis=0)-1)
...
>>> data = np.random.randn(1000,3)
>>> index = pd.date_range("20170101", periods = 1000, freq="B")
>>> df = pd.DataFrame(data= data, index =index)
現在假設我想在工作日重採樣業務月末頻率:
>>> resampler = df.resample("BM")
如果我現在申請了我的功能f
我不沒有達到預期的結果。我想從f
得到我輸出的最後一行。
>>> resampler.apply(f)
這是becaumes在我的函數f
返回大熊貓數據幀的cumprod
。我可以寫我的f
,它只返回最後一行。但是,我想在其他地方使用這個函數來返回整個數據框。這可以通過在函數f
中引入一個像「last_row」這樣的標誌來解決,該標誌可以返回完整的或最後一行。但這個解決方案看起來很討厭。
我認爲這可以簡化,如果你真正想要的是首先應用該功能,然後選擇該月的最後一個營業日。這實際上不需要重新採樣,它是一個累積函數的重採樣組合,這使得我現在所做的這個棘手的 – JohnE