Есть ли более быстрая групповая корреляция в Python - PullRequest
1 голос
/ 03 марта 2020

Привет! Я использую некоторый код python, который вычисляет корреляцию между двумя столбцами в моем pandas кадре данных, в то время как он группируется по дате и идентификатору. Например, мой df выглядит так:

date id    z      x   y
1    A     z1     x1  y1
1    A     z2     x2  y2
....
....
1    D     z_n-1  x2  y2
1    D     z_n    x2  y2

Старайтесь не фокусироваться на подписчиках или на том, что на самом деле означают данные. Скорее сфокусируйтесь на общей форме. Для данной даты у меня есть несколько повторных наблюдений для данного идентификатора, и я хочу вычислить корреляцию между «x» и «y» для каждого идентификатора на каждую дату. У моей df около 2,4 миллиона строк, что примерно разделено на 200 дат.

Мой код для получения корреляций, очевидно, работает (это кажется тривиальной проблемой, если я подожду достаточно долго), но он работает уже около 7 часов, и я хотел бы знать, написал ли кто-нибудь что-то нестандартное, что может работать быстрее? Во всяком случае, вот код

corr_df = df.groupby(['date','id'])['x'].corr(df['y'])

1 Ответ

1 голос
/ 03 марта 2020

У меня был похожий кусок кода, и я думаю, что это может быть быстрее:
Попробуйте
corr_series = df.groupby(['date','id'])[['x','y']].corr()['y'][:,'x']

Таким образом, вы не запускаете корреляцию с внешним рядом ( внешний, даже если это просто df до группировки), но вместо этого он вычисляет корреляцию внутри объекта groupby.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...