Для начала я бы предложил изменить ваши данные таким образом, чтобы значения OHLCV каждой валюты были их собственными столбцами (например, "btc_open | btc_high" и т. Д.). Это значительно упрощает создание матриц корреляции. Я бы также предложил начать с анализа только одной метрики (например, цены закрытия) и, возможно, движения периода (например, закрытия-открытия). Чтобы ответить на ваш вопрос:
Панды могут возвращать матрицу корреляции всех столбцов с:
df.corr()
Если вы хотите использовать только определенные столбцы, выберите их в DataFrame:
df[["col1", "col2"]].corr()
Вы можете вернуть одно значение корреляции между двумя столбцами в форме:
df["col1"].corr(df["col2"])
Если вы хотите указать конкретный диапазон дат, я бы направил вас на этот вопрос . Я полагаю, что для этого потребуется, чтобы столбец даты или индекс имели тип datetime. Если вы не знаете, как работать с этим типом или преобразовать его, я бы посоветовался обратиться к документации для панд (возможно, начните с pandas.to_datetime ).
В будущем я бы предложил включить в ваш пост фрагмент данных. Я не верю, что Google Диск является подходящей формой для обмена данными, и определенно неуместно устанавливать для данных «запросить доступ».
РЕДАКТИРОВАТЬ: я проверил ваши данные и создал меньшее подмножество, чтобы проверить этот метод. Если в данных есть недостатки, у вас могут возникнуть проблемы, но у меня их не было, когда я проверял их на выборке из ваших первых 100 дней и 10 монет (после транспонирования df.iloc [: 100,: 10].
Во-первых, транспонируйте DataFrame, чтобы столбцы были организованы по монетам, а строки - по датам.
df = df.T
После этого мы объединяем новый DataFrame (результат). В качестве альтернативы, можно объединить исходные и удалить столбцы после. К сожалению, я не могу думать о не итеративном методе. Этот метод идет столбец за столбцом, создает DataFrame для каждой монеты, добавляет префикс имени монеты к именам столбцов, а затем объединяет каждый DataFrame до конца.
result = pd.DataFrame()
coins = df.columns.tolist()
for coin in coins:
coin_data = df[coin]
split_coin = coin_data.apply(pd.Series).add_prefix(coin+"_")
result = pd.concat([result, split_coin], axis=1)