2017-03-19 5 views
2

Ich habe den Datensatz mit den folgenden Werten:Zählfrequenzen des entsprechenden Wertes in pandas [Python 3]

var1 var2 
1234 abc 
2345 bcs 
5678 csd 
1234 abc 
1234 bcs 
5678 csd 
1234 bcs 
1234 xyz 
1234 abc 
9101 zzz 

I für jeden eindeutigen Wert in Spalte var1 brauchen die obersten 3 Häufigkeitszählungen zu zählen und zeigen, von die entsprechenden Werte in var2, und die Ausgabe erhalten, zum Beispiel:

var1 var2 count 
1234 abc 3 
1234 bcs 2 
1234 xyz 1 
5678 csd 2 
9101 zzz 1 

Was ist der effizienteste Weg, dies zu tun?

Antwort

2

Sie nlargest

df.groupby('var1').var2.apply(lambda x: x.value_counts().nlargest(3)) \ 
    .reset_index(name='count').rename(columns={'level_1': 'var2'}) 

    var1 var2 count 
0 1234 abc  3 
1 1234 bcs  2 
2 1234 xyz  1 
3 2345 bcs  1 
4 5678 csd  2 
5 9101 zzz  1 
1
df_a.groupby(['var1','var2'])['var2'].agg({'count':'count'}).reset_index() 
+0

Scott, schöne Lösung aufnehmen müssen! Das Hinzufügen von count() am Ende hat auch funktioniert, aber eine Zählungsspalte am Ende zu haben, sieht viel besser aus, danke! –

0

Das funktionierte:

df.groupby(['var1','var2']).count() 
Verwandte Themen