2017-01-26 1 views
4

ähnlich die documentation example Deduplizierung, mag ich folgenden Datenrahmen schwenken: sollteeine Pandas Datenrahmen Verschwenkung während zusätzliche Spalten

foo extra bar baz 
0 one  x A 1 
1 one  x B 2 
2 one  x C 3 
3 two  y A 4 
4 two  y B 5 
5 two  y C 6 

Das Ergebnis

seine
 extra A B C 

one  x 1 2 3 
two  y 4 5 6 

dies in kürzerer Weise getan werden kann als

  • Aufspalten der zusätzliche Spalte aus, bevor
  • Schwenk
  • deduplizieren Sie es separat
  • es zurück zu den geschwenkten Daten zusammenfügen?

(ich erwartete, dass der Drehbefehl der Lage sein, dies zu tun, aber meine Versuche gescheitert.)

Hier ist der Code für den Datenrahmen mit ihm zu spielen:

df = pd.DataFrame({'foo': ['one','one','one','two','two','two'], 
        'extra': ['x','x','x','y','y','y'], 
        'bar': ['A', 'B', 'C', 'A', 'B', 'C'], 
        'baz': [1, 2, 3, 4, 5, 6]}) 

Antwort

1

Verwenden set_index und unstack

In [2087]: df.set_index(['foo', 'extra', 'bar'])['baz'].unstack().reset_index() 
Out[2087]: 
bar foo extra A B C 
0 one  x 1 2 3 
1 two  y 4 5 6 
+0

Schön! Um das gewünschte Ergebnis zu erreichen, muss ein finaler '.set_index ('foo')' hinzugefügt werden. Bei doppelten foo/bar-Paaren bleibt der Fehler "pivot" bestehen. –

3

Sie verwenden können pivot_table, pivot akzeptiert nur eine Spalte als Index, Spalte und Wert während pivot_table mult annehmen können iple Spalten:

df.pivot_table('baz', ['foo', 'extra'], 'bar').reset_index() 

#bar foo extra A B C 
# 0 one  x 1 2 3 
# 1 two  y 4 5 6 
+0

Beachten Sie, dass dieses unterschiedliche Verhalten für doppelte foo/bar Paare hat: es aggregiert die baz Werte statt einen Fehler zu geben. –

Verwandte Themen