Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 大熊猫的时变秩自相关_Python_Pandas_Aggregate_Pandas Groupby_Pandas Apply - Fatal编程技术网

Python 大熊猫的时变秩自相关

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

我有一个这种示意图形式的多索引数据框(尽管我使用的实际数据框有数百万行):

按产品和时间分组,我希望各场景中“价格”的自相关,示意图定义如下(按产品):

(t时的秩自相关)=t时的秩相关('Price','Price',t+1时的秩相关)

其中(‘时间t时的价格’是一个向量,其条目数量与场景数量相同(我们为每个产品提供一个这样的向量)。例如,对于时间t=2时的产品“Alpha”,所需数量为

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