大熊猫的时变秩自相关

2021-04-12 00:13:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个原理图形式的多索引pandas数据帧(尽管我使用的实际数据帧有数百万行):

import pandas as pd

df = pd.DataFrame([['Alpha', 'a', 1,10], ['Alpha', 'a', 2,20],['Alpha', 'a', 3,30],
                   ['Alpha', 'b', 1,50],['Alpha', 'b', 2,60],['Alpha', 'b', 3,10],
                   ['Alpha', 'c', 1,10],['Alpha', 'c', 2,70],['Alpha', 'c', 3,80], 
                   ['Beta', 'a', 1,30], ['Beta', 'a', 2,40],['Beta', 'a', 3,50],
                   ['Beta', 'b', 1,80],['Beta', 'b', 2,70], ['Beta', 'b', 3,60],
                   ['Beta', 'c', 1,10],['Beta', 'c', 2,30], ['Beta', 'c', 3,40]], 
                    columns=['Product', 'Scenario', 'Time','Price'])\
                  .set_index(['Product', 'Scenario'])

按产品和时间分组,我希望不同方案的“价格”的排名自相关,示意性定义如下(按产品):

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

其中,时间t的('Price'在时间t)是一个向量,它包含与场景一样多的条目(每个产品都有一个这样的向量)。例如,对于时间t=2时的产品“α”,所需数量为

^{pr2}$

等于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

我想先从

数据框groupby(['Product','Time']).agg(自相关函数)

但是聚合操作需要来自两个不同组(即不同时间的组)的数据,到目前为止,我还没有找到这样做的方法。有什么想法吗?在