2012-12-01 11 views
26

Sto cercando di capire come contare per il numero di righe per coppia di colonne univoche (ip, useragent), ad es.Contare per coppia di colonne univoche in panda

d = pd.DataFrame({'ip': ['192.168.0.1', '192.168.0.1', '192.168.0.1', '192.168.0.2'], 'useragent': ['a', 'a', 'b', 'b']}) 

    ip    useragent 
0 192.168.0.1  a 
1 192.168.0.1  a 
2 192.168.0.1  b 
3 192.168.0.2  b 

Per produrre:

ip   useragent 
192.168.0.1 a   2 
192.168.0.1 b   1 
192.168.0.2 b   1 

idee?

risposta

37

Se si utilizza groupby, si otterrà ciò che si desidera.

d.groupby(['ip', 'useragent']).count() 

produce:

ip   useragent    
192.168.0.1 a   2 
      b   1 
192.168.0.2 b   1 
+0

Grande, grazie. Mancato il passaggio finale su groupby/count/[]. – barnybug

+2

Per me, questo dà solo l'attributo 'AttributeError: 'L'oggetto' DataFrame 'non ha attributo' size''. – Anaphory

+0

Questo non funziona per me. Ottengo ' MultiIndex: 0 voci Empty DataFrame' Pandas versione 15.2 – feinmann

1
print(d.groupby(['ip', 'useragent']).size().reset_index().rename(columns={0:''})) 

dà:

  ip useragent 
0 192.168.0.1   a 2 
1 192.168.0.1   b 1 
2 192.168.0.2   b 1 

Un'altra opzione potrebbe essere bello pandas.crosstab:

print(pd.crosstab(d.ip, d.useragent)) 
print('\nsome cosmetics:') 
print(pd.crosstab(d.ip, d.useragent).reset_index().rename_axis('',axis='columns')) 

dà:

useragent a b 
ip    
192.168.0.1 2 1 
192.168.0.2 0 1 

some cosmetics: 
      ip a b 
0 192.168.0.1 2 1 
1 192.168.0.2 0 1 
Problemi correlati