Qlikのようにパンダデータフレームの列の一意の値を数えますか?


106

このようなテーブルがある場合:

df = pd.DataFrame({
         'hID': [101, 102, 103, 101, 102, 104, 105, 101],
         'dID': [10, 11, 12, 10, 11, 10, 12, 10],
         'uID': ['James', 'Henry', 'Abe', 'James', 'Henry', 'Brian', 'Claude', 'James'],
         'mID': ['A', 'B', 'A', 'B', 'A', 'A', 'A', 'C']
})

count(distinct hID)Qlikで、一意のhIDのカウントを5にすることができます。パンダのデータフレームを使用してPythonでそれを行うにはどうすればよいですか?それとも、厄介な配列ですか?同様に、もしcount(hID)そうするとしたら、Qlikで8を取得します。パンダでそれを行うための同等の方法は何ですか?


@piRSquaredありがとう。df [['dID'、 'hID']]。agg(['count'、 'size'、 'nunique'])のようなことをすることができ、それは機能します。ただし、groupbyと組み合わせると機能しません。したがって、df [['dID'、 'hID']]。groupby( 'mID')。agg(['count'、 'size'、 'nunique'])はKeyErrorを言います。特定の列を選択して条件を適用する方法はありますか?
Alhpa Delta 2017

3つの方法 df[['mID', 'dID','hID']].groupby('mID').agg(['count', 'size', 'nunique'])
2017

またはdf[['dID','hID']].groupby(df['mID']).agg(['count', 'size', 'nunique'])
piRSquared 2017

1
またはdf.groupby('mID')[['dID', 'hID']].agg(['count', 'size', 'nunique'])
piRSquared 2017

回答:


192

異なる値を数え、使用しますnunique

df['hID'].nunique()
5

null以外の値のみをカウントし、以下を使用しますcount

df['hID'].count()
8

null値を含む合計値をカウントし、size属性を使用します。

df['hID'].size
8

編集して条件を追加

ブールインデックスを使用します。

df.loc[df['mID']=='A','hID'].agg(['nunique','count','size'])

または使用query

df.query('mID == "A"')['hID'].agg(['nunique','count','size'])

出力:

nunique    5
count      5
size       5
Name: hID, dtype: int64

ありがとう!条件を追加するにはどうすればよいですか?mID = 'A'のnuniqueのように?
Alhpa Delta 2017

73

データがデータフレームの名前であると仮定すると、次のことができます。

data['race'].value_counts()

これにより、個別の要素とその発生数が表示されます。


それぞれのユニークなアイテムの比率が必要な場合は、それも可能です。data['race'].value_counts(normalize=True)
偽の

25

または、各列の一意の値の数を取得します。

df.nunique()

dID    3
hID    5
mID    3
uID    5
dtype: int64

の新機能 pandas 0.20.0 pd.DataFrame.agg

df.agg(['count', 'size', 'nunique'])

         dID  hID  mID  uID
count      8    8    8    8
size       8    8    8    8
nunique    3    5    3    5

あなたは常にagg内で行うことができましたgroupbystackプレゼンテーションが好きだったので、最後に使いました。

df.groupby('mID').agg(['count', 'size', 'nunique']).stack()


             dID  hID  uID
mID                       
A   count      5    5    5
    size       5    5    5
    nunique    3    5    5
B   count      2    2    2
    size       2    2    2
    nunique    2    2    2
C   count      1    1    1
    size       1    1    1
    nunique    1    1    1

ありがとう!条件を追加するにはどうすればよいですか?mID = 'A'のnuniqueのように?
Alhpa Delta 2017

@AlhpaDelta最後に何か追加しました。お
役に立てば幸い


0

hIDデータフレームなどdf、列内の一意の値をカウントするには、次を使用します。

len(df.hID.unique())

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.