Ich versuche, mehrere Datenrahmen mit aufeinanderfolgenden Zusammenführungsvorgängen zusammenzuführen. Ich möchte dem Namen der neu zusammengeführten Spaltennamen ein Suffix hinzufügen. Eine vereinfachte Version meines Codes sieht so aus:
from pandas import *
f0 = DataFrame(columns=['data'], data=[1,2,3], index=['a','b','c'])
f1 = DataFrame(columns=['data'], data=[4,5,6], index=['c','b','a'])
f2 = DataFrame(columns=['data'], data=[7,8,9], index=['a','c','b'])
merged = f0
merged = merged.merge(f1, left_index=True, right_index=True, suffixes=("_0", "_1"))
merged = merged.merge(f2, left_index=True, right_index=True, suffixes=("", "_2"))
print merged.columns
Mit Pandas 0.15.2 auf Python 2.7 gibt dies Folgendes zurück:
Index([u'data_0', u'data_1', u'data'], dtype='object')
während ich erwartet hätte
Index([u'data_0', u'data_1', u'data_2'], dtype='object')
anscheinend willst du das nur?
In [45]: pd.concat([f0,f1,f2],axis=1,ignore_index=True)
Out[45]:
0 1 2
a 1 6 7
b 2 5 9
c 3 4 8
Suffixe gelten nur, wenn es doppelte Spalten gibt, die nach der ersten Zusammenführung nicht vorhanden sind (im Vergleich zur 3.)
In [46]: merged1 = merged.merge(f1, left_index=True, right_index=True, suffixes=("_0", "_1"))
In [47]: merged1
Out[47]:
data_0 data_1
c 3 4
b 2 5
a 1 6
In [48]: merged1.merge(f2, left_index=True, right_index=True, suffixes=("", "_2"))
Out[48]:
data_0 data_1 data
a 1 6 7
c 3 4 8
b 2 5 9
Ah danke für die Erklärung, ich habe übersehen, dass Suffixe nur auf doppelte Spaltennamen angewendet werden. Und tatsächlich ist die concat-Lösung einfacher. Und fürs Protokoll: concat(... ignore_index=True) ist genau das Gegenteil von dem, was ich will, aber mit concat(... ignore_index=False) funktioniert es gut.
Prima
Denken Sie daran, dass Sie im Allgemeinen keine doppelten Spalten haben möchten
Sie möchten vielleicht ein Ergebnis mit mehreren Ebenen - verwenden Sie das Schlüsselargument, um zu verketten
Hilfreichster Kommentar
anscheinend willst du das nur?
Suffixe gelten nur, wenn es doppelte Spalten gibt, die nach der ersten Zusammenführung nicht vorhanden sind (im Vergleich zur 3.)