(Modifica per aggiungere: invece di questa risposta si prega di consultare la risposta di @ YT che è stato aggiunto in seguito, ma è chiaramente migliore.)
si potrebbe andare con numpy.corrcoef()
che è sostanzialmente la stessa di corr
in panda, ma la sintassi potrebbe essere più adatta a ciò che desideri.
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) })
for s in ['s1','s2']:
for i in ['i1','i2']:
print('corrcoef',s,i,np.corrcoef(df1[s],df2[i])[0,1])
che le stampe:
corrcoef s1 i1 -0.00416977553597
corrcoef s1 i2 -0.0096393047035
corrcoef s2 i1 -0.026278689352
corrcoef s2 i2 -0.00402030582064
In alternativa si potrebbe caricare i risultati in un dataframe con etichette appropriate:
cc = pd.DataFrame()
for s in ['s1','s2']:
for i in ['i1','i2']:
cc = cc.append(pd.DataFrame(
{ 'corrcoef':np.corrcoef(df1[s],df2[i])[0,1] }, index=[s+'_'+i]))
che assomiglia a questo:
corrcoef
s1_i1 -0.004170
s1_i2 -0.009639
s2_i1 -0.026279
s2_i2 -0.004020
La mia risposta è attualmente selezionata ma è la risposta più semplice e veloce. Seleziona quella come migliore risposta se sei d'accordo. – JohnE