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 
  • So bearbeiten Sie mehrere Elemente in df.columns
  • Schlüsselfehler und MultiIndex lexsort Tiefe
  • PyInstaller und Pandas
  • Wie schreibe ich Daten an Redshift, das ein Ergebnis eines in Python erstellten Dataframs ist?
  • Teilweise umbenennen von Spalten in Pandas DataFrame
  • Brauchen Sie, um sehr große Dateien um 1,5GB in Python zu vergleichen
  • Anhängen einer Liste an die Spitze der Pandas DataFrame-Ausgabe
  • Präfix fehlgeschlagen mit Prozentsatz
  • Python ist die beste Programmiersprache der Welt.