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?
Antworten
Zu viele Anzeigen?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.
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
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)
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
.
- See previous answers
- Weitere Antworten anzeigen