Ich beginne mit solchen Eingabedaten
df1 = pandas.DataFrame( {
"Name" : ["Alice", "Bob", "Mallory", "Mallory", "Bob" , "Mallory"] ,
"City" : ["Seattle", "Seattle", "Portland", "Seattle", "Seattle", "Portland"] } )
Was beim Drucken so aussieht:
City Name
0 Seattle Alice
1 Seattle Bob
2 Portland Mallory
3 Seattle Mallory
4 Seattle Bob
5 Portland Mallory
Die Gruppierung ist einfach genug:
g1 = df1.groupby( [ "Name", "City"] ).count()
und Drucken ergibt ein GroupBy
Objekt:
City Name
Name City
Alice Seattle 1 1
Bob Seattle 2 2
Mallory Portland 2 2
Seattle 1 1
Was ich aber irgendwann möchte, ist ein anderes DataFrame-Objekt, das alle Zeilen im GroupBy-Objekt enthält. Mit anderen Worten, ich möchte das folgende Ergebnis erhalten:
City Name
Name City
Alice Seattle 1 1
Bob Seattle 2 2
Mallory Portland 2 2
Mallory Seattle 1 1
Ich kann in der Pandas-Dokumentation nicht genau sehen, wie dies erreicht werden kann. Hinweise wären willkommen.
python
pandas
dataframe
pandas-groupby
multi-index
saveenr
quelle
quelle
Empty DataFrame
Columns: []
Index: [(Alice, Seattle), (Bob, Seattle), (Mallory, Portland), (Mallory, Seattle)]
Antworten:
g1
Hier ist ein DataFrame. Es hat jedoch einen hierarchischen Index:Vielleicht willst du so etwas?
Oder so etwas wie:
quelle
reset.index()
macht den Job, toll!df1.groupby( [ "Name", "City"] ).size().to_frame(name = 'count').reset_index()
.reset_index()
scheint mir der beste Weg zu sein, um die Ausgabe zu verbinden, die Sie erhaltendf.groupby('some_column').apply(your_custom_func)
. Das war für mich nicht intuitiv.pandas.core.groupby.DataFrameGroupBy
Objekt zurückgibt , nichtpandas.core.frame.DataFrame
.Ich möchte die Antwort von Wes leicht ändern, da Version 0.16.2 dies erfordert
as_index=False
. Wenn Sie es nicht einstellen, erhalten Sie einen leeren Datenrahmen.Quelle :
BEARBEITEN:
In der Version
0.17.1
und höher können Siesubset
incount
undreset_index
mit Parametername
in verwendensize
:Der Unterschied zwischen
count
undsize
besteht darin, dasssize
NaN-Werte gezählt werden, währendcount
dies nicht der Fall ist.quelle
df1.groupby( [ "Name", "City"]).size().reset_index(name="count")
as_index=False' stopped working in latest versions? I also tried to run
df1.groupby (["Name", "Stadt"], as_index = False) .size () `aber das Ergebnis nicht beeinflusst (wahrscheinlich, weil das Ergebnis der GruppierungSeries
nicht istDataFrame
groupby
durch diese Spalten. Aber ich bin mir nicht sicher, weil ich kein Pandas-Entwickler bin.Dies sollte einfach die Aufgabe erfüllen:
Hier
grouped_df.size()
zieht die einzigartige groupby Zählen undreset_index()
Verfahren setzt den Namen der Spalte , die Sie es haben wollen. Schließlich wird die Pandas-Dataframe()
Funktion aufgerufen, um ein DataFrame-Objekt zu erstellen.quelle
Der Schlüssel ist die Verwendung der Methode reset_index () .
Verwenden:
Jetzt haben Sie Ihren neuen Datenrahmen in g1 :
quelle
Vielleicht verstehe ich die Frage falsch, aber wenn Sie die Gruppe zurück in einen Datenrahmen konvertieren möchten, können Sie .to_frame () verwenden. Ich wollte den Index zurücksetzen, als ich das tat, also habe ich auch diesen Teil aufgenommen.
Beispielcode ohne Bezug zur Frage
quelle
Ich fand das funktionierte für mich.
quelle
Die folgende Lösung kann einfacher sein:
quelle
Ich habe mit mengenweisen Daten aggregiert und im Datenrahmen gespeichert
quelle
Diese Lösungen haben bei mir nur teilweise funktioniert, da ich mehrere Aggregationen durchgeführt habe. Hier ist eine Beispielausgabe meiner Gruppe, nach der ich in einen Datenrahmen konvertieren wollte:
Da ich mehr als die von reset_index () bereitgestellte Anzahl wollte, habe ich eine manuelle Methode zum Konvertieren des obigen Bildes in einen Datenrahmen geschrieben. Ich verstehe, dass dies nicht die pythonischste / pandasischste Art ist, dies zu tun, da es ziemlich ausführlich und explizit ist, aber es war alles, was ich brauchte. Verwenden Sie grundsätzlich die oben erläuterte Methode reset_index (), um einen "Gerüst" -Datenrahmen zu starten, durchlaufen Sie dann die Gruppenpaarungen im gruppierten Datenrahmen, rufen Sie die Indizes ab, führen Sie Ihre Berechnungen für den nicht gruppierten Datenrahmen durch und legen Sie den Wert in Ihrem neuen aggregierten Datenrahmen fest .
Wenn ein Wörterbuch nicht Ihr Ding ist, können die Berechnungen inline für die for-Schleife angewendet werden:
quelle