matriz de correlación de pandas entre cada par grupo por artículo

Tengo un archivo csv como este:

date,sym,close 2014.01.01,A,10 2014.01.02,A,11 2014.01.03,A,12 2014.01.04,A,13 2014.01.01,B,20 2014.01.02,B,22 2014.01.03,B,23 2014.01.01,C,33 2014.01.02,C,32 2014.01.03,C,31 

Luego, obtengo una fecha llamada df través de la función read_csv

 import numpy as np import pandas as pd df=pd.read_csv('daily.csv',index_col=[0]) groups=df.groupby('sym')[['close']].apply(lambda x:func(x['close'].values)) 

Los groups ven así:

 sym A [nan,1.00,2.00,...] B [nan,1.00,2.00,...] C [nan,1.00,2.00,...] 

¿Cómo calcular la correlación entre cada par de sym?

 AA,AB,AC,BB,BA,BC,CA,CB,CC 

Por cierto, los números de artículo de cada símbolo pueden NO ser los mismos.

Con df como arriba, haz una tabla dinámica:

 dfp = df.pivot('date','sym') print(dfp) 
  close sym ABC date 2014-01-01 10 20 33 2014-01-02 11 22 32 2014-01-03 12 23 31 2014-01-04 13 NaN 30 

Los pandas calcularán los coeficientes de pares:

 print(dfp.corr()) 
  close sym ABC sym close A 1.000000 0.981981 -1.000000 B 0.981981 1.000000 -0.981981 C -1.000000 -0.981981 1.000000 

Pero si quieres hacerlo, echa un seaborn :

 import seaborn as sns sns.corrplot(dfp, annot=True) 

resultado:

introduzca la descripción de la imagen aquí

Después de obtener groups :

 sym A [nan,1.00,2.00,...] B [nan,1.00,2.00,...] C [nan,1.00,2.00,...] 

He creado un DataFrame df2

 df2=DataFrame() df2['A']=groups['A'] df2['B']=groups['B'] df2['C']=groups['C'] df2.corr() 

Este método puede obtener la correlación a través de datos de grupos. Sin embargo, no es perfecto. ¿Cómo convertir un grupo a un DataFrame como este? ¿Teclas de bucle de grupos? Necesito seguir intentando.