2017-04-26 5 views
0

Lassen Sie uns sagen, dass ich einen Datenrahmen haben, wo ich Benutzer mit Ländern zuordnen möchten:Das Finden der häufigste Vorkommen in einem Pandas Datenrahmen

>>> dfUsers[['userId', 'country', 'lat']].dropna().groupby(['userId', 'country']).agg(len).reset_index() 

       userId  country lat 
0 1479705782818706665  India 1 
1 1480576924651623757  India 12 
2 1480576924651623757   РФ 2 
3 1480928137574356334  Malaysia 17 
4 1480988896538924406  India 1 
5 1481723517601846740  Malaysia 2 
6 1481810347655435765 Singapore 3 
7 1481818704328005112 Singapore 6 
8 1482457537889441352 Singapore 18 
9 1482488858703566411 Singapore 1 
10 148273India 1 
11 1483106342385227382 Singapore 2 
12 1483316566673069712  Malaysia 4 
13 1484507758001657608 Singapore 6 
14 1484654275131873053 Singapore 1 
15 1484666213119301417 Singapore 1 
16 1484734631705057076  Malaysia 4 

Was ich tun möchte, die ein zuzuordnen ist Benutzer mit ein Land. In diesem Fall ist es leicht zu sehen, dass der Benutzer 1480576924651623757 zwei verschiedene Länder hat, die ihm zugeordnet sind. Jedoch möchte ich diesen Benutzer mit India verbinden, weil der Benutzer öfter in Indien gewesen ist, als er/sie in dem anderen Land gewesen ist ...

Gibt es einen ordentlichen Weg, dies zu tun? Ich kann immer 'userId' durchlaufen und finde die Werte, die einem grösseren entsprechen. Ich aber frage mich, ob es eine Möglichkeit, dies ohne die Schleife zu tun ...

+0

'lat' Spalte ist für die Zählung' user' + 'country'? – jezrael

+0

Das ist nur eine Dummy-Spalte für die Gruppe von ... – ssm

Antwort

1

Es Sie idxmax scheint benötigen für max Index pro Gruppe durch Spalte lat zu finden und wählen Sie dann durch loc:

df = df.loc[df.groupby('userId')['lat'].idxmax()] 
print (df) 
       userId country lat 
0 1479705782818706665  India 1 
1 1480576924651623757  India 12 < 12 is max, so India 
3 1480928137574356334 Malaysia 17 
4 1480988896538924406  India 1 
5 1481723517601846740 Malaysia 2 
6 1481810347655435765 Singapore 3 
7 1481818704328005112 Singapore 6 
8 1482457537889441352 Singapore 18 
9 1482488858703566411 Singapore 1 
10 148273India 1 
11 1483106342385227382 Singapore 2 
12 1483316566673069712 Malaysia 4 
13 1484507758001657608 Singapore 6 
14 1484654275131873053 Singapore 1 
15 1484666213119301417 Singapore 1 
16 1484734631705057076 Malaysia 4 

df = dfUsers[['userId', 'country', 'lat']].dropna() 
              .groupby(['userId', 'country']) 
              .size() 
              .reset_index(name='Count') 

df = df.loc[df.groupby('userId')['Count'].idxmax()] 
Verwandte Themen