Pandas: Suffixe werden beim zweiten Zusammenführen ignoriert

Erstellt am 10. Feb. 2015  ·  3Kommentare  ·  Quelle: pandas-dev/pandas

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')
Reshaping Usage Question

Hilfreichster Kommentar

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

Alle 3 Kommentare

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

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen