Comment décompresser une Série de n-uplets dans les Pandas?

Parfois je me retrouve avec une série de tuples, listes lors de l'utilisation de Pandas. Ce qui est commun lorsque, par exemple, faire un groupe et de passage d'une fonction à plusieurs valeurs de retour:

import numpy as np
from scipy import stats
df = pd.DataFrame(dict(x=np.random.randn(100),
                       y=np.repeat(list("abcd"), 25)))
out = df.groupby("y").x.apply(stats.ttest_1samp, 0)
print out

y
a       (1.3066417476, 0.203717485506)
b    (0.0801133382517, 0.936811414675)
c      (1.55784329113, 0.132360504653)
d     (0.267999459642, 0.790989680709)
dtype: object

Quelle est la façon correcte de "décompresser" de cette structure, de sorte que je reçois un DataFrame avec deux colonnes?

Une question connexe est de savoir comment je peux décompresser soit cette structure ou les résultats du dataframe en deux Séries/tableau d'objets. Cela fonctionne presque:

t, p = zip(*out)

mais il t est

 (array(1.3066417475999257),
 array(0.08011333825171714),
 array(1.557843291126335),
 array(0.267999459641651))

et l'on doit prendre la peine de le presser.

  • df.groupby("y").x.apply(lambda x, y: pd.Series(stats.ttest_1samp(x, y), ['A', 'B']), 0).unstack() est un peu bordélique (et nécessite de connaître la longueur de l'entrée.
InformationsquelleAutor mwaskom | 2014-04-02