Python 成对相关

Python 成对相关,python,pandas,split-apply-combine,Python,Pandas,Split Apply Combine,我有一个数据框,看起来类似于: In [45]: df Out[45]: Item_Id Location_Id date price 0 A 5372 1 0.5 1 A 5372 2 NaN 2 A 5372 3 1.0 3 A 6065 1 1.0 4 A 6065

我有一个数据框,看起来类似于:

In [45]: df 
Out[45]: 
   Item_Id  Location_Id  date  price
0        A         5372     1    0.5
1        A         5372     2    NaN
2        A         5372     3    1.0
3        A         6065     1    1.0
4        A         6065     2    1.0
5        A         6065     3    3.0
6        A         7000     1    NaN
7        A         7000     2    NaN
8        A         7000     3    NaN
9        B         5372     1    3.0
10       B         5372     2    NaN
11       B         5372     3    1.0
12       B         6065     1    2.0
13       B         6065     2    1.0
14       B         6065     3    3.0
15       B         7000     1    8.0
16       B         7000     2    NaN
17       B         7000     3    9.0
对于每个
Location\u Id
类别中的每个
Item\u Id
,我想计算每个
Item\u Id
对之间的成对价格相关性。请注意,虽然我只给出了两个唯一的
项目Id
在上面的示例数据中,有几十个不同的值,
Item\u Id
在我的真实数据中使用。我尝试过使用
groupby.corr()
,但这似乎没有满足我的需求


最后,我想要N个数据帧,其中N是
df
中唯一的
Location\u Id
值的数量。N个数据帧中的每一个都将是特定
位置Id
类别中存在的
项目Id
的所有成对组合之间的价格平方相关矩阵。因此,N个数据帧中的每一个都将有J行和J列,其中J是该特定
Location\u Id
组中唯一
Item\u Id
值的数量

您可以按
位置\u Id
分组,然后以
日期
项目\u Id
为中心,并获得相关性:

>>> corr = lambda obj: obj.pivot('date', 'Item_Id', 'price').corr()
>>> df.groupby('Location_Id').apply(corr)
Item_Id                  A      B
Location_Id Item_Id              
5372        A        1.000 -1.000
            B       -1.000  1.000
6065        A        1.000  0.866
            B        0.866  1.000
7000        A          NaN    NaN
            B          NaN  1.000

每个
位置\u Id

都有一个2 x 2的矩阵,这正是我需要的。非常感谢。