Ich versuche, ein Pivot einer Tabelle durchzuführen, die Zeichenfolgen als Ergebnisse enthält.Pandas - Pivot_Table mit nicht-numerischen Werten? (DataError: Keine numerischen Typen zu aggregieren)
import pandas as pd
df1 = pd.DataFrame({'index' : range(8),
'variable1' : ["A","A","B","B","A","B","B","A"],
'variable2' : ["a","b","a","b","a","b","a","b"],
'variable3' : ["x","x","x","y","y","y","x","y"],
'result': ["on","off","off","on","on","off","off","on"]})
df1.pivot_table(values='result',rows='index',cols=['variable1','variable2','variable3'])
Aber ich bekomme: DataError: No numeric types to aggregate
.
Dies funktioniert wie vorgesehen, wenn ich Ergebniswerte in Zahlen ändern:
df2 = pd.DataFrame({'index' : range(8),
'variable1' : ["A","A","B","B","A","B","B","A"],
'variable2' : ["a","b","a","b","a","b","a","b"],
'variable3' : ["x","x","x","y","y","y","x","y"],
'result': [1,0,0,1,1,0,0,1]})
df2.pivot_table(values='result',rows='index',cols=['variable1','variable2','variable3'])
Und ich bekomme, was ich brauche:
variable1 A B
variable2 a b a b
variable3 x y x y x y
index
0 1 NaN NaN NaN NaN NaN
1 NaN NaN 0 NaN NaN NaN
2 NaN NaN NaN NaN 0 NaN
3 NaN NaN NaN NaN NaN 1
4 NaN 1 NaN NaN NaN NaN
5 NaN NaN NaN NaN NaN 0
6 NaN NaN NaN NaN 0 NaN
7 NaN NaN NaN 1 NaN NaN
Ich weiß, dass ich die Saiten auf numerische Werte zuordnen kann und dann umkehren die Operation, aber vielleicht gibt es eine elegantere Lösung?
Schließlich eine Lösung zum Ersetzen der Pivot() ändert sich in Pandas 0.17.1 – camdenl
@RandallGoodwin, ich realisiere diese Frage ist zwei Jahre alt, aber ich bekomme den Fehler "ValueError: Funktion nicht reduziert "Wenn du dein Lambda verwendest, würdest du wissen, warum? – RustyShackleford
Eine andere Idee: Wenn Sie möglicherweise mehrere Werte angezeigt haben, könnten Sie Strings concat, indem Sie Ihre Aggfunc = Lambda x: "" .join ([str (y) für y in x]) – dllahr