400 Stimmen

Kombinieren von zwei Serien zu einem DataFrame in Pandas

Ich habe zwei Serien s1 und s2 mit den gleichen (nicht aufeinander folgenden) Indizes. Wie kombiniere ich s1 und s2 zu zwei Spalten in einem DataFrame und behalte einen der Indizes als dritte Spalte bei?

571voto

Andy Hayden Punkte 324102

Ich denke, concat ist ein schöner Weg, das zu tun. Wenn sie vorhanden sind, verwendet es die Namenseigenschaften der Serien als Spalten (ansonsten einfach nummeriert):

In [1]: s1 = pd.Series([1, 2], index=['A', 'B'], name='s1')

In [2]: s2 = pd.Series([3, 4], index=['A', 'B'], name='s2')

In [3]: pd.concat([s1, s2], axis=1)
Out[3]:
   s1  s2
A   1   3
B   2   4

In [4]: pd.concat([s1, s2], axis=1).reset_index()
Out[4]:
  index  s1  s2
0     A   1   3
1     B   2   4

Hinweis: Dies gilt auch für mehr als 2 Serien.

75voto

swmfg Punkte 1279

Sie können to_frame verwenden, wenn beide die gleichen Indizes haben.

>= v0.23

a.to_frame().join(b)

< v0.23

a.to_frame().join(b.to_frame())

37voto

Jeff Punkte 123194

Pandas wird diese übergebenen Series automatisch ausrichten und den gemeinsamen Index erstellen. Hier sind sie zufällig gleich. reset_index verschiebt den Index in eine Spalte.

In [2]: s1 = Series(randn(5), index=[1,2,4,5,6])

In [4]: s2 = Series(randn(5), index=[1,2,4,5,6])

In [8]: DataFrame(dict(s1 = s1, s2 = s2)).reset_index()
Out[8]: 
   index        s1        s2
0      1 -0.176143  0.128635
1      2 -1.286470  0.908497
2      4 -0.995881  0.528050
3      5  0.402241  0.458870
4      6  0.380457  0.072251

21voto

Sateesh Punkte 712

Wenn ich das beantworten darf.

Die Grundlagen für die Umwandlung von Series in ein Datenrahmen besteht darin zu verstehen:

1. Auf konzeptioneller Ebene ist jede Spalte im Datenrahmen eine Series.

2. Und jeder Spaltenname ist ein Schlüsselname, der auf eine Series abbildet.

Wenn Sie diese beiden Konzepte im Kopf behalten, können Sie viele Möglichkeiten zur Umwandlung von Series in einen Datenrahmen denken. Eine einfache Lösung wäre folgende:

Erstellen Sie hier zwei Series

import pandas as pd

series_1 = pd.Series(list(range(10)))

series_2 = pd.Series(list(range(20,30)))

Erstellen Sie einen leeren Datenrahmen mit den gewünschten Spaltennamen

df = pd.DataFrame(columns = ['Spaltenname#1', 'Spaltenname#2'])

Platzieren Sie den Series-Wert im Datenrahmen unter Verwendung des Mapping-Konzepts

df['Spaltenname#1'] = series_1

df['Spaltenname#2'] = series_2

Überprüfen Sie die Ergebnisse jetzt

df.head(5)

20voto

jbn Punkte 661

Beispielcode:

a = pd.Series([1,2,3,4], index=[7,2,8,9])
b = pd.Series([5,6,7,8], index=[7,2,8,9])
data = pd.DataFrame({'a': a,'b':b, 'idx_col':a.index})

Pandas ermöglicht es Ihnen, einen DataFrame aus einem dict mit Series als Werten und den Spaltennamen als Schlüssel zu erstellen. Wenn es eine Series als Wert findet, verwendet es den Index der Series als Teil des Index des DataFrame. Diese Datenanpassung ist einer der Hauptvorteile von Pandas. Folglich hat der frisch erstellte DataFrame duplizierte Werte. Im obigen Beispiel hat data['idx_col'] die gleichen Daten wie data.index.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X