如何找到两个变量之间但跨越不同时间轴的相关性(“滞后相关性”)

时间:2019-05-13 23:54:30

标签: python pandas correlation lag

假设我正在销售彼此互补的东西。 而且我正在尝试找出商品销售之间的相关性,但是要在不同的销售日期。

(因为我认为第item01天的销售额可能会影响item02~99d+30的销售额)

dataframe看起来像这样。

.    Item01  Item02  Item03 Item04  ... 

day1   120     130     140    200    ...

day2   200     200     150    119    ...

day3   162     110     180    220    ...

day4   170     130     160    190    ...

...    ...     ...     ...    ...    ...

我学习了使用熊猫数据框的.corr()的方法 但我想找到跨时间关联。

我应该做自己的回归函数吗?

非常感谢您

df_sales = pd.DataFrame(dic_sales)

corr = df_sales.corr(method = 'pearson')

corr val

.            item01 Item02 ...

item01(d+30)  0.75   0.46  ...

item02(d+30)  0.44   0.84  ...

...           ...    ...

1 个答案:

答案 0 :(得分:0)

创建时移30天的新列,然后对这些列运行corr方法。

df_shifted = df_sales.shift(periods=30)
df_shifted.columns = ['Item01_30','Item02_30','Item03_30','Item04_30']

会将所有记录上移30行,并在观察值0-29中保留NaN值。然后将30个NaN值添加到原始数据帧的末尾:

empty_row = pd.Series([Nan,Nan,Nan,Nan], index=['Item01','Item02','Item03','Item04'])
for i in range(30):
    df_sales = df_sales.append(empty_row)

接下来,将df_shifted和df_sales合并为一个数据帧:

frames = [df_sales, df_shifted]
df_sales_with_shift = pd.concat(frames, axis=1)

仅在没有NaN值的行上运行corr方法:

df_sales_with_shift[30:len(df_sales_with_shift.index)-30].corr(method ='pearson')

这将需要您减少选择的时间段数来减少数据集,因此根据样本量,您可能需要注意不要选择太长的时间段。