Python 大熊猫的时变秩自相关
我有一个这种示意图形式的多索引数据框(尽管我使用的实际数据框有数百万行): 按产品和时间分组,我希望各场景中“价格”的秩自相关,示意图定义如下(按产品): (t时的秩自相关)=t时的秩相关('Price','Price',t+1时的秩相关) 其中(‘时间t时的价格’是一个向量,其条目数量与场景数量相同(我们为每个产品提供一个这样的向量)。例如,对于时间t=2时的产品“Alpha”,所需数量为Python 大熊猫的时变秩自相关,python,pandas,aggregate,pandas-groupby,pandas-apply,Python,Pandas,Aggregate,Pandas Groupby,Pandas Apply,我有一个这种示意图形式的多索引数据框(尽管我使用的实际数据框有数百万行): 按产品和时间分组,我希望各场景中“价格”的秩自相关,示意图定义如下(按产品): (t时的秩自相关)=t时的秩相关('Price','Price',t+1时的秩相关) 其中(‘时间t时的价格’是一个向量,其条目数量与场景数量相同(我们为每个产品提供一个这样的向量)。例如,对于时间t=2时的产品“Alpha”,所需数量为 import scipy from scipy import stats as ss ss.spear
import scipy
from scipy import stats as ss
ss.spearmanr([20,60,70] , [30,10,80])[0]
这等于0.5。对于最后一个时间步骤(在本例中为t=3),它应该简单地返回NaN(因为t+1没有数据)。总之,所需的结果数据帧应为:
import numpy as np
df_result = pd.DataFrame([['Alpha',1,0], ['Alpha',2,0.5],['Alpha',3,np.nan],
['Beta',1,1], ['Beta',2,1],['Beta',3,np.nan]],
columns=['Product', 'Time','Autocorrelation'])\
.set_index(['Product'])
Time Autocorrelation
Product
Alpha 1 0.0
Alpha 2 0.5
Alpha 3 NaN
Beta 1 1.0
Beta 2 1.0
Beta 3 NaN
我想从这样的事情开始
df.groupby(['Product','Time']).agg(自相关函数)
但是聚合操作需要来自两个不同组(即不同时间的组)的数据,到目前为止,我还没有找到这样做的方法。有什么想法吗?像这样吗,特别是
df.Price.autocorr(lag=1)
不幸的是,据我所知,df.autocorr()不适用于秩(Spearman)相关性。此外,我需要为聚合场景的每个时间步计算一个自相关(即,输入跨场景的自相关跨度的向量,时间t和t+1)。您可以移动价格
:df['Price\u shift']=df.Price.shift(-1)
,然后使用Spearman关联:df.groupby(['Product','Time']).corr(method='spearman')
。但是,这并不能正确返回NaN
s,我也不知道为什么。h/t@JohnE
import numpy as np
df_result = pd.DataFrame([['Alpha',1,0], ['Alpha',2,0.5],['Alpha',3,np.nan],
['Beta',1,1], ['Beta',2,1],['Beta',3,np.nan]],
columns=['Product', 'Time','Autocorrelation'])\
.set_index(['Product'])
Time Autocorrelation
Product
Alpha 1 0.0
Alpha 2 0.5
Alpha 3 NaN
Beta 1 1.0
Beta 2 1.0
Beta 3 NaN