Ich habe einen Pandas-Datenrahmen im folgenden Format:
df = pd.DataFrame([[1.1, 1.1, 1.1, 2.6, 2.5, 3.4,2.6,2.6,3.4,3.4,2.6,1.1,1.1,3.3], list('AAABBBBABCBDDD'), [1.1, 1.7, 2.5, 2.6, 3.3, 3.8,4.0,4.2,4.3,4.5,4.6,4.7,4.7,4.8], ['x/y/z','x/y','x/y/z/n','x/u','x','x/u/v','x/y/z','x','x/u/v/b','-','x/y','x/y/z','x','x/u/v/w'],['1','3','3','2','4','2','5','3','6','3','5','1','1','1']]).T
df.columns = ['col1','col2','col3','col4','col5']
df:
col1 col2 col3 col4 col5
0 1.1 A 1.1 x/y/z 1
1 1.1 A 1.7 x/y 3
2 1.1 A 2.5 x/y/z/n 3
3 2.6 B 2.6 x/u 2
4 2.5 B 3.3 x 4
5 3.4 B 3.8 x/u/v 2
6 2.6 B 4 x/y/z 5
7 2.6 A 4.2 x 3
8 3.4 B 4.3 x/u/v/b 6
9 3.4 C 4.5 - 3
10 2.6 B 4.6 x/y 5
11 1.1 D 4.7 x/y/z 1
12 1.1 D 4.7 x 1
13 3.3 D 4.8 x/u/v/w 1
Jetzt möchte ich dies in zwei Spalten wie folgt gruppieren:
df.groupby(['col5','col2']).reset_index()
Ausgabe:
index col1 col2 col3 col4 col5
col5 col2
1 A 0 0 1.1 A 1.1 x/y/z 1
D 0 11 1.1 D 4.7 x/y/z 1
1 12 1.1 D 4.7 x 1
2 13 3.3 D 4.8 x/u/v/w 1
2 B 0 3 2.6 B 2.6 x/u 2
1 5 3.4 B 3.8 x/u/v 2
3 A 0 1 1.1 A 1.7 x/y 3
1 2 1.1 A 2.5 x/y/z/n 3
2 7 2.6 A 4.2 x 3
C 0 9 3.4 C 4.5 - 3
4 B 0 4 2.5 B 3.3 x 4
5 B 0 6 2.6 B 4 x/y/z 5
1 10 2.6 B 4.6 x/y 5
6 B 0 8 3.4 B 4.3 x/u/v/b 6
Ich möchte die Anzahl für jede Zeile wie folgt erhalten. Erwartete Ausgabe:
col5 col2 count
1 A 1
D 3
2 B 2
etc...
Wie erhalte ich meine erwartete Ausgabe? Und ich möchte die größte Anzahl für jeden 'col2'-Wert finden?
Antworten:
Gefolgt von der Antwort von @ Andy, können Sie Folgendes tun, um Ihre zweite Frage zu lösen:
quelle
Sie suchen
size
:Um die gleiche Antwort wie "waitkuo" (die "zweite Frage") zu erhalten, aber etwas sauberer, müssen Sie nach Level gruppieren:
quelle
Einfügen von Daten in einen Pandas-Datenrahmen und Angabe des Spaltennamens .
Dies sind unsere gedruckten Daten:
Um eine Gruppe von Datenrahmen in Pandas und Zählern zu erstellen , müssen
Sie eine weitere Spalte angeben , die die Gruppierung zählt . Nennen wir diese Spalte im Datenrahmen "COUNTER" .
So was:
AUSGABE:
quelle
Idiomatische Lösung, die nur eine einzige Gruppe verwendet
Erläuterung
Das Ergebnis der Groupby-
size
Methode ist eine Serie mitcol5
undcol2
im Index. Von hier aus können Sie eine andere groupby-Methode verwenden, um den Maximalwert jedes Werts in zu ermitteln. Diescol2
ist jedoch nicht erforderlich. Sie können einfach alle Werte absteigend sortieren und dann nur die Zeilen mit dem ersten Auftreten voncol2
mit derdrop_duplicates
Methode beibehalten.quelle
name
inreset_index()
der aktuellen Version von Pandas: pandas.pydata.org/pandas-docs/stable/generated/...DataFrame
nicht damit gearbeitet habeSeries
. Danke für den Link.Wenn Sie eine neue Spalte (z. B. 'count_column') mit den Gruppenzahlen in den Datenrahmen einfügen möchten:
(Ich habe 'col5' ausgewählt, da es keine Nan enthält.)
quelle
Sie können einfach die Anzahl der integrierten Funktionen verwenden, gefolgt von der Funktion groupby
quelle