Корреляция между двумя столбцами данных и соответствующими заголовками - PullRequest
1 голос
/ 03 мая 2019

У меня есть два кадра данных из первоклассных, которые выглядят так, как показано ниже. Первый кадр данных имеет многоиндексный заголовок.

Я пытаюсь найти корреляцию между каждым столбцом в кадре данных с соответствующим кадром данных на основе валюты (т. Е. KRW, THB, USD, INR). В данный момент я делаю цикл для итерации по каждому столбцу, сопоставляя по индексу и соответствующему заголовку, прежде чем найти корреляцию.

for stock_name in index_data.columns.get_level_values(0):
    stock_prices    = index_data.xs(stock_name, level=0, axis=1)
    stock_prices    = stock_prices.dropna()
    fx              = currency_data[stock_prices.columns.get_level_values(1).values[0]]
    fx              = fx[fx.index.isin(stock_prices.index)]

    merged_df = pd.merge(stock_prices, fx, left_index=True, right_index=True)
    merged_df[0].corr(merged_df[1])

Есть ли более панда способ сделать это?

index_data dataframe

fx dataframe

1 Ответ

1 голос
/ 05 мая 2019

Итак, вы хотите найти корреляцию между ценой акции и соответствующей валютой.(Или корреляция цены акций со всеми валютами?)

# dummy data
date_range = pd.date_range('2019-02-01', '2019-03-01', freq='D')

stock_prices = pd.DataFrame(
    np.random.randint(1, 20, (date_range.shape[0], 4)),
    index=date_range,
    columns=[['BYZ6DH', 'BLZGSL', 'MBT', 'BAP'],
            ['KRW', 'THB', 'USD', 'USD']])
fx = pd.DataFrame(np.random.randint(1, 20, (date_range.shape[0], 3)),
                  index=date_range, columns=['KRW', 'THB', 'USD'])

Вот как это выглядит, вычисление корреляции по этим данным не имеет особого смысла, так как оно случайное.

>>> print(stock_prices.head())
           BYZ6DH BLZGSL MBT BAP
              KRW    THB USD USD
2019-02-01     15     10  19  19
2019-02-02      5      9  19   5
2019-02-03     19      7  18  10
2019-02-04      1      6   7  18
2019-02-05     11     17   6   7

>>> print(fx.head())
            KRW  THB  USD
2019-02-01   15   11   10
2019-02-02    6    5    3
2019-02-03   13    1    3
2019-02-04   19    8   14
2019-02-05    6   13    2

Используйте apply для расчета корреляции между столбцами с одной и той же валютой.

def f(x, fx):
    correlation = x.corr(fx[x.name[1]])
    return correlation

correlation = stock_prices.apply(f, args=(fx,), axis=0)

>>> print(correlation)
BYZ6DH  KRW   -0.247529
BLZGSL  THB    0.043084
MBT     USD   -0.471750
BAP     USD    0.314969
dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...