Wie entpacke ich eine Serie von Tupeln in Pandas?

Manchmal komme ich mit einer Reihe von Tupeln / Listen bei der Verwendung von Pandas. Dies ist üblich, wenn man beispielsweise eine Gruppe durchführt und eine Funktion überschreitet, die mehrere Rückgabewerte hat:

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 

Was ist der richtige Weg, um diese Struktur zu entpacken, damit ich ein DataFrame mit zwei Spalten bekomme?

Eine verwandte Frage ist, wie ich diese Struktur oder das resultierende Dataframe in zwei Series / Array-Objekte entpacken kann. Das funktioniert fast:

 t, p = zip(*out) 

Aber es ist t

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

Und man muss den zusätzlichen Schritt nehmen, ihn zu quetschen.

3 Solutions collect form web for “Wie entpacke ich eine Serie von Tupeln in Pandas?”

Vielleicht ist das am meisten schlagartig (die meisten pythonischen ich denke):

 out.apply(pd.Series) 

Wenn du die Spalten um etwas sinnvoller umbenennen möchtest als:

 out.columns=['Kstats','Pvalue'] 

Wenn du nicht den Standardnamen für den Index wünschst:

 out.index.name=None 

könnte sein:

 >>> pd.DataFrame(out.tolist(), columns=['out-1','out-2'], index=out.index) out-1 out-2 ya -1.9153853424536496 0.067433 b 1.277561889173181 0.213624 c 0.062021492729736116 0.951059 d 0.3036745009819999 0.763993 [4 rows x 2 columns] 

Ich glaube, du willst das:

 df=pd.DataFrame(out.tolist()) df.columns=['KS-stat', 'P-value'] 

Ergebnis:

  KS-stat P-value 0 -2.12978778869 0.043643 1 3.50655433879 0.001813 2 -1.2221274198 0.233527 3 -0.977154419818 0.338240 
  • Verschmelzung von zwei Pandas dataframes auf dem nächsten Zeitstempel
  • "Busfehler: 10" beim Versuch, den Pandas-Spaltennamen einzustellen
  • Hervorhebung des letzten Datenpunktes im Pandas-Plot
  • Wie wähle man die Zeilen aus, die einen bestimmten Wert in mindestens einem der Elemente in einer Zeile enthalten?
  • Merkwürdiges Verhalten beim Versuch, eine Zeile an jede Gruppe in einer Gruppe nach Objekt anzuhängen
  • Boolesche Maske im Pandas-Panel
  • Pandas Split String in Spalten
  • Pandas ".convert_objects (convert_numeric = True)" veraltet
  • Zählen des aufeinanderfolgenden positiven Wertes im Python-Array
  • Resampling Dataframe in Pandas als Prüfvorgang
  • Kumulative Summe und Prozentsatz auf Spalte?
  • Python ist die beste Programmiersprache der Welt.