Pandas Dataframe で値が発生する頻度をカウントする方法

  1. df.groupby().count() メソッド
  2. Series.value_counts() メソッド
  3. df.groupby().size() メソッド

データフレームで作業しているときに、列で値が発生した回数を数えたい場合、つまり、頻度を計算したい場合があります。この目的のために主に 3つの方法が使用されます。それらを一つずつ見てみましょう。

  1. df.groupby().count()
  2. Series.value_counts()
  3. df.groupby().size()

次のセクションでは、次のように同じ DataFrame を使用します。

import pandas as pd

df = pd.DataFrame({
                    'A': [
                        'jim',
                        'jim',
                        'jim',
                        'jim',
                        'sal',
                        'tom',
                        'tom',
                        'sal',
                        'sal'],
                    'B': [
                        'a',
                        'b', 
                        'a', 
                        'b', 
                        'b', 
                        'b', 
                        'a', 
                        'a', 
                        'b']
                    })  

df.groupby().count() メソッド

1つの列の頻度を計算する場合は、この方法が最適です。

import pandas as pd

df = pd.DataFrame({
                    'A': [
                        'jim',
                        'jim',
                        'jim',
                        'jim',
                        'sal',
                        'tom',
                        'tom',
                        'sal',
                        'sal'],
                    'B': [
                        'a',
                        'b', 
                        'a', 
                        'b', 
                        'b', 
                        'b', 
                        'a', 
                        'a', 
                        'b']
                    })  

freq = df.groupby(['A']).count() 
print(freq)

freq = df.groupby(['B']).count() 
print(freq)

以下が出力されます。

     B
A     
jim  4
sal  3
tom  2
   A
B   
a  4
b  5

Series.value_counts() メソッド

すべてのデータフレームオブジェクトは Series オブジェクトのコレクションであるため、このメソッドは pandas.Series オブジェクトに最適です。

Series.values_counts() 関数を使用します

import pandas as pd

df = pd.DataFrame({
                    'A': [
                        'jim',
                        'jim',
                        'jim',
                        'jim',
                        'sal',
                        'tom',
                        'tom',
                        'sal',
                        'sal'],
                    'B': [
                        'a',
                        'b', 
                        'a', 
                        'b', 
                        'b', 
                        'b', 
                        'a', 
                        'a', 
                        'b']
                    })  

freq = df['A'].value_counts() 
print(freq) 

freq = df['B'].value_counts() 
print(freq) 

以下が出力されます。

jim    4
sal    3
tom    2
Name: A, dtype: int64
b    5
a    4
Name: B, dtype: int64

df.groupby().size() メソッド

上記の 2つのメソッドを使用して複数の列の頻度をカウントすることはできませんが、df.groupby().size() を複数の列に同時に使用できます。

import pandas as pd

df = pd.DataFrame({
                    'A': [
                        'jim',
                        'jim',
                        'jim',
                        'jim',
                        'sal',
                        'tom',
                        'tom',
                        'sal',
                        'sal'],
                    'B': [
                        'a',
                        'b', 
                        'a', 
                        'b', 
                        'b', 
                        'b', 
                        'a', 
                        'a', 
                        'b']
                    })  

freq = df.groupby(['A', 'B']).size() 
print(freq)

以下が出力されます。

A    B
jim  a    2
     b    2
sal  a    1
     b    2
tom  a    1
     b    1
dtype: int64

comments powered by Disqus