Ich möchte meinen Pandas-Datenrahmen mit hierarchisch indizierten Spalten nehmen und die Werte so normalisieren, dass die Werte mit dem gleichen äußeren Index eins ergeben. Zum Beispiel:GroupBy Transformation auf hierarchisch indiziertem Datenframe
cols = pd.MultiIndex.from_tuples([('A', 1), ('A', 2), ('B', 1), ('B', 2)])
X = pd.DataFrame(np.arange(20).reshape(5,4), columns=cols)
gibt einen Datenframe X:
A B
1 2 1 2
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
4 16 17 18 19
würde Ich mag die Zeilen normalisieren, so dass die A-Säulen 1 und die auf 1 summieren B Spalten summieren D.h. zu generieren:
for-Schleife folgendeA B
1 2 1 2
0 0.000000 1.000000 0.400000 0.600000
1 0.444444 0.555556 0.461538 0.538462
2 0.470588 0.529412 0.476190 0.523810
3 0.480000 0.520000 0.482759 0.517241
4 0.484848 0.515152 0.486486 0.513514
Das funktioniert:
res = []
for (k,g) in X.groupby(axis=1, level=0):
g = g.div(g.sum(axis=1), axis=0)
res.append(g)
res = pd.concat(res, axis=1)
Aber das Motto nicht:
X.groupby(axis=1, level=0).transform(lambda x: x.div(x.sum(axis=1), axis=0))
mit der Fehlermeldung:
Valueerror: Transformations müssen zurückkehren ein Skalarwert für jede Gruppe
Irgendeine Idee, was das Problem sein könnte?
Ja, das tut es. Vielen Dank! Ich verstehe nicht ganz, warum Transformation nicht funktioniert, aber die Anwendung scheint sowieso generischer zu sein. – dylkot