Calculer la corrélation entre toutes les colonnes d'un DataFrame et de toutes les colonnes d'une autre DataFrame?
J'ai un DataFrame objet stocks
rempli avec des rendements boursiers. J'ai une autre DataFrame objet industries
rempli avec l'industrie des rendements. Je veux trouver chaque stock corrélation avec chaque industrie.
import numpy as np
np.random.seed(123)
df1=pd.DataFrame( {'s1':np.random.randn(10000), 's2':np.random.randn(10000) } )
df2=pd.DataFrame( {'i1':np.random.randn(10000), 'i2':np.random.randn(10000) } )
Le moyen coûteux de le faire est de fusionner les deux DataFrame objets, de calculer la corrélation, puis de jeter toutes les actions du stock et de l'industrie à l'industrie d'établir des corrélations. Est-il un moyen plus efficace de faire cela?
OriginalL'auteur Deets McGeets | 2015-03-08
Vous devez vous connecter pour publier un commentaire.
Et voici un one-liner qui utilise
apply
sur les colonnes et évite les boucles for imbriquées. Le principal avantage est queapply
construit le résultat dans un DataFrame.OriginalL'auteur Y T
Ici est un peu plus simple de répondre que la maladie de JohnE qui utilise des pandas en natif au lieu d'utiliser numpy.corrcoef. Comme un bonus supplémentaire, vous n'avez pas à récupérer la valeur de corrélation d'un idiot 2x2 matrice de corrélation, parce que les pandas de série de série de la corrélation de la fonction renvoie un nombre, pas une matrice.
OriginalL'auteur failwhale
(Modifier pour ajouter: au Lieu de cette réponse, s'il vous plaît vérifier @yt de la réponse qui a été ajouté plus tard, mais est clairement mieux.)
Vous pourriez aller avec
numpy.corrcoef()
qui est fondamentalement la même quecorr
dans les pandas, mais la syntaxe peut être plus propice à ce que vous voulez.Qui imprime:
Vous pouvez également charger les résultats dans un dataframe avec des étiquettes:
Qui ressemble à ceci:
OriginalL'auteur JohnE