web-dev-qa-db-ja.com

df.value_counts()とdf.groupby( '...')。count()を使用するのが適切な場合

Pandasで聞いたことがありますが、同じことを行う方法は複数あることがよくありますが、

特定の列内の値でデータをグループ化し、その値を持つアイテムの数を数えようとしている場合、df.groupby('colA').count()を使用する意味があり、df['colA'].value_counts()

15
Ollie Khakwani

違いがあります _value_counts_ return:

結果のオブジェクトは降順であるため、最初の要素が最も頻繁に出現する要素になります。

しかし count ではなく、indexgroupby('col')の列によって作成された)によって出力をソートします。


_df.groupby('colA').count() 
_

関数count._によるdfのすべての列の集計用です。したがって、NaNsを除く値をカウントします。

したがって、countが必要な場合、必要な列は1つだけです。

_df.groupby('colA')['colA'].count() 
_

サンプル:

_df = pd.DataFrame({'colB':list('abcdefg'),
                   'colC':[1,3,5,7,np.nan,np.nan,4],
                   'colD':[np.nan,3,6,9,2,4,np.nan],
                   'colA':['c','c','b','a',np.nan,'b','b']})

print (df)
  colA colB  colC  colD
0    c    a   1.0   NaN
1    c    b   3.0   3.0
2    b    c   5.0   6.0
3    a    d   7.0   9.0
4  NaN    e   NaN   2.0
5    b    f   NaN   4.0
6    b    g   4.0   NaN

print (df['colA'].value_counts())
b    3
c    2
a    1
Name: colA, dtype: int64

print (df.groupby('colA').count())
      colB  colC  colD
colA                  
a        1     1     1
b        3     2     2
c        2     2     1

print (df.groupby('colA')['colA'].count())
colA
a    1
b    3
c    2
Name: colA, dtype: int64
_
15
jezrael

Groupbyと_value_counts_はまったく異なる関数です。データフレームでvalue_countsを実行できません。

_Value Counts_は単一の列またはシリーズのみに制限され、その唯一の目的は値の頻度のシリーズを返すことです

Groupbyはオブジェクトを返すため、その上で統計計算を実行できます。したがって、df.groupby(col).count()を実行すると、groupbyの_specific columns_に関して列に存在する真の値の数が返されます。

いつ_value_counts_を使用する必要があり、_groupby.count_を使用する必要がある場合:例を見てみましょう

_df = pd.DataFrame({'id': [1, 2, 3, 4, 2, 2, 4], 'color': ["r","r","b","b","g","g","r"], 'size': [1,2,1,2,1,3,4]})
_

グループバイカウント

_df.groupby('color').count()
       id  size
color          
b       2     2
g       2     2
r       3     3
_

Groupbyカウントは、通常、指定された1つ以上の列_with reference to_または_with respect to_のすべての列に存在する有効な値の数を取得するために使用されます。したがって、数字(nan)は除外されません。

Groupbyを使用して頻度を見つけるには、@ jezのように、指定された列自体に対して集計する必要があります。 (おそらくこれを回避し、開発者の生活を楽にするためにvalue_countsが実装されています)。

値のカウント

_df['color'].value_counts()

r    3
g    2
b    2
Name: color, dtype: int64
_

通常、値カウントは、特定の1つの列に存在する値の頻度を見つけるために使用されます。

結論として :

.groupby(col).count()は、指定されたcolに関して列に存在する有効な値の頻度を検索する場合に使用する必要があります。

.value_counts()は、シリーズの頻度を見つけるために使用する必要があります。

17
Bharath M