pandas - pivot_table mit nicht-numerischen Werten? (DataError: Keine numerischen Typen zum Aggregieren)

9

Ich versuche ein Pivot einer Tabelle mit Strings als Ergebnis zu erstellen.

%Vor%

Aber ich bekomme: DataError: No numeric types to aggregate .

Dies funktioniert wie vorgesehen, wenn ich Ergebniswerte in Zahlen ändere:

%Vor%

Und ich bekomme, was ich brauche:

%Vor%

Ich weiß, dass ich die Strings numerischen Werten zuordnen und die Operation dann umkehren kann, aber vielleicht gibt es eine elegantere Lösung?

    
Paweł Rumian 09.10.2013, 17:53
quelle

2 Antworten

24

Meine ursprüngliche Antwort basierte auf Pandas 0.14.1, und seitdem haben sich viele Dinge in der Funktion pivot_table geändert (Zeilen - & gt; Index, Spalten - & gt; Spalten ...)

Außerdem scheint es, dass der ursprüngliche Lambda-Trick, den ich gepostet habe, nicht mehr auf Pandas 0.18 funktioniert. Sie müssen eine reduzierende Funktion bereitstellen (auch wenn es sich um min, max oder mean handelt). Aber selbst das schien unsachgemäß - weil wir den Datensatz nicht reduzieren, ihn nur transformieren ... Also habe ich mich beim Entstapeln etwas mehr umgeschaut ...

%Vor%

Legen Sie zuerst einen Index für die Daten fest, indem Sie den Index + die Spalten verwenden, die Sie stapeln möchten, und rufen Sie dann das Entstapeln auf, indem Sie das Argument level verwenden.

%Vor%

Der resultierende Datenrahmen ist unten.

    
Randall Goodwin 21.10.2014, 00:02
quelle
2

Ich denke, der beste Kompromiss besteht darin, On / Off durch True / False zu ersetzen, was es Pandas ermöglicht, die Daten besser zu "verstehen" und auf eine intelligente, erwartete Weise zu handeln.

%Vor%

Sie haben das im Wesentlichen in Ihrer Frage eingeräumt. Meine Antwort ist, ich glaube nicht, dass es einen besseren Weg gibt, und du solltest sowieso 'on' / 'off' ersetzen für was auch immer als nächstes kommt.

Wie Andy Hayden in den Kommentaren hervorhebt, erhalten Sie eine bessere Leistung, wenn Sie on / off durch 1/0 ersetzen.

    
Dan Allan 09.10.2013 17:58
quelle