Ich habe einen Datenrahmen mit Spalten wie:
%Vor%Ich möchte einen neuen Datenrahmen erhalten, in dem Spalten mit demselben Namen gemittelt werden:
%Vor%Hier wäre Spalte foo1 der Durchschnitt der drei Spalten foo1 im ursprünglichen Datenrahmen, foo2 wäre der Durchschnitt der beiden Spalten foo2 und foo3 wäre nur foo3
Hinweis: ID und Name sind nicht numerisch und ich muss sie behalten.
Die Grundidee ist, dass Sie nach Ihren Spaltennamen gruppieren können und Operationen für jede Gruppe meinen.
Ich habe einige Kommentare zu Ihrer Frage gesehen und versucht, Ihnen verschiedene Wege zu geben, um das Ziel zu erreichen. ( Lösung (3) ist das beste, was ich gefunden habe! )
(1) Schnelle Lösung. Wenn Sie sehr begrenzte Spalten haben, die nicht numerisch sind und eigene eindeutige Namen haben, z. B. die Spalten id
und name
. Was Sie tun können, ist:
Setze zuerst den Index ['id', 'name']
, um sie zu erhalten,
Verwenden Sie dann DataFrame.groupby
function für columns
, setzen Sie axis=1
(durchlaufen Sie jede Spalte), wenden Sie mean
function für jede Gruppe an.
Und schließlich, setze den Index zurück, um ['id', 'name']
Spalten wiederherzustellen
Hier ist ein Beispielcode:
%Vor%(2) Komplettlösung. Wenn Sie viele nicht numerische und eindeutige Namen haben, können Sie Folgendes tun:
Transponiere zuerst deinen Datenrahmen,
%Vor% Dann gruppieren Sie nach Operationen (auf seinem Index und axis=0
), behandeln aber sorgfältig jede Gruppe: Für diese numerischen Gruppen geben Sie ihren Mittelwert zurück; und für diese nicht numerischen Gruppen geben Sie ihre erste Zeile zurück:
Und schließlich transponiere zurück:
%Vor%Hier ist ein Beispielcode:
%Vor% Sie müssen import numbers
Weitere Hinweise:
(3) Alles in einem! Diese Lösung ist die beste, die ich gefunden habe:
%Vor%Ich habe versucht, jede Gruppe für die nicht-transponierten Gruppen zu behandeln, dh
%Vor%Und
%Vor% Ich habe vorher versagt, weil ich die Achse nicht sorgfältig gebe. Sie müssen axis=1
für mean
-Funktion festlegen und Spalten für nicht numerische Gruppen zurückgeben.
Danke!