Pandas Соотношение одного столбца к множеству столбцов по диапазону столбца - PullRequest
0 голосов
/ 20 марта 2020

Предполагая, что у меня есть фрейм данных, аналогичный приведенному ниже (реальный фрейм данных содержит миллион наблюдений), как получить корреляцию между столбцом сигнала и списком возвращаемых столбцов, а затем сгруппировать по столбцу Signal_Up?

Я попробовал функцию pandas corrwith, но она не дает мне группировки корреляции для столбца signal_up

df[['Net_return_at_t_plus1', 'Net_return_at_t_plus5',
           'Net_return_at_t_plus10']].corrwith(df['Signal_Up']))

Я пытаюсь найти корреляцию между столбцом сигнала и другими net возвращает группу столбцов по различным значениям столбца signal_up.

Данные и желаемый результат приведены ниже.

Желаемый результат

Desired Result

Данные

Data Frame

Ответы [ 2 ]

0 голосов
/ 23 марта 2020

Я могу получить корреляции по отдельным категориям столбца Signal_Up с помощью функции «groupby». Однако я не могу применить функцию «corr» более чем к двум столбцам.

Итак, мне пришлось использовать функцию «concat», чтобы объединить их все.

`a = df.groupby ('Signal_Up') [['signal,' Net_return_at_t_plus1 ']]. corr (). unstack (). iloc [:, 1]

b = df.groupby ('Signal_Up') [['signal', 'Net_return_at_t_plus5']]. corr (). unstack (). iloc [:, 1]

c = df.groupby ('Signal_Up') [['signal', 'Net_return_at_t_plus10']]. corr (). unstack (). iloc [:, 1]

dfCorr = pd.concat ([a, b, c], axis = 1) `

0 голосов
/ 20 марта 2020

Используя простой кадр данных ниже:

df= pd.DataFrame({'v1': [1, 3, 2, 1, 6, 7],
                  'v2': [2, 2, 4, 2, 4, 4],
                  'v3': [3, 3, 2, 9, 2, 5],
                  'v4': [4, 5, 1, 4, 2, 5]})

(1-я интерпретация) один способ получить корреляции одной переменной с другими столбцами:

correlations = df.corr().unstack().sort_values(ascending=False) # Build correlation matrix
correlations = pd.DataFrame(correlations).reset_index() # Convert to dataframe
correlations.columns = ['col1', 'col2', 'correlation'] # Label it
correlations.query("col1 == 'v2' & col2 != 'v2'") # Filter by variable
# output of this code will give correlation of column v2 with all the other columns 

(2-я интерпретация) в одну сторону чтобы получить корреляции столбца v1 со столбцом v3, v4 после группировки по столбцу v2 использует следующую строку:

df.groupby('v2')[['v1', 'v3', 'v4']].corr().unstack()['v1']

В вашем случае v2 - это Signal_Up, v1 - это сигнал, а v3, v4. столбцы прокси 'Net_return_at_t_plusX' столбцы.

...