Парная корреляция

У меня есть датафрейм, который выглядит примерно так:

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 ответ

Решение

Вы можете группировать по Location_Id затем поверните на date а также Item_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

и вы получите матрицу 2 х 2 для каждого Location_Id,

Другие вопросы по тегам