我使用pandas.rolling_apply
將數據擬合到一個分佈並從中獲取一個值,但我需要它也報告一個合適的滾動優度(特別是p值)。目前我正在做這樣的:從pandas.rolling_apply返回兩個值
def func(sample):
fit = genextreme.fit(sample)
return genextreme.isf(0.9, *fit)
def p_value(sample):
fit = genextreme.fit(sample)
return kstest(sample, 'genextreme', fit)[1]
values = pd.rolling_apply(data, 30, func)
p_values = pd.rolling_apply(data, 30, p_value)
results = pd.DataFrame({'values': values, 'p_value': p_values})
的問題是,我有很多的數據,並擬合函數是昂貴的,所以我不想兩次稱呼它爲每個樣品。我寧願做的是這樣的:
def func(sample):
fit = genextreme.fit(sample)
value = genextreme.isf(0.9, *fit)
p_value = kstest(sample, 'genextreme', fit)[1]
return {'value': value, 'p_value': p_value}
results = pd.rolling_apply(data, 30, func)
如果結果是DataFrame
有兩列。如果我嘗試運行此操作,則會發生異常: TypeError: a float is required
。有沒有可能做到這一點,如果是的話,如何?
如果你返回一個系列而不是字典,它工作嗎? –
@AndyHayden不,這給'TypeError:無法將系列轉換爲' –
aquavitae
看到這個問題http://stackoverflow.com/questions/19121854/using-rolling-apply-on-a-dataframe-對象 – Jeff