成对相关

时间:2014-12-13 20:11:45

标签: 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     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

对于每个Item_Id类别中的每个Location_Id,我想计算每个Item_Id对之间价格的成对关联。请注意,虽然我只给了两个独特的Item_Id 上面的示例数据中的值,Item_Id在我的实际数据中有几十个不同的值。我尝试过使用groupby.corr(),但这似乎并没有给我我想要的东西。

最终,我想要N个数据帧,其中N是Location_Id中唯一df值的数量。 N个数据帧中的每一个将是特定Item_Id类别中存在的Location_Id的所有成对组合之间的价格的平方相关矩阵。因此,N个数据帧中的每一个都将具有J行和列,其中J是该特定Item_Id组中唯一Location_Id值的数量。

1 个答案:

答案 0 :(得分:1)

您可以按Location_Id进行分组,然后转向dateItem_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

,每个Location_Id得到一个2 x 2矩阵。