Парная корреляция
У меня есть датафрейм, который выглядит примерно так:
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
,