2012-12-01 6 views
26

ユニークな列(ip、useragent)あたりの行数でカウントする方法を理解しようとしています。パンダのユニークな列ペアでカウント

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 

生成するには、次の

ip   useragent 
192.168.0.1 a   2 
192.168.0.1 b   1 
192.168.0.2 b   1 

アイデア?

答えて

37

groupbyを使用すると、あなたが望むものが得られます。

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

は生成します。

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

グレート、感謝を。 groupby/count/[]の最後のステップを逃しました。 – barnybug

+2

私にとっては、それは 'AttributeError: 'DataFrame'オブジェクトには属性 'size'がありません。 – Anaphory

+0

これは私のためには機能しません。私は ' MultiIndex:0 entries 空のDataFrame'パンダバージョン15.2 – feinmann

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

ができます:

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

別の素敵なオプションが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')) 

ができます:

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 
関連する問題