Qlik에서와 같이 Pandas 데이터 프레임의 열에서 고유 값을 계산합니까?


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)유일한 HID 5의 수를 가지고 올 클릭 테크에서. pandas 데이터 프레임을 사용하여 파이썬에서 어떻게 수행합니까? 아니면 numpy 배열일까요? 마찬가지로 그렇게한다면 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-08-18

세 가지 방법 df[['mID', 'dID','hID']].groupby('mID').agg(['count', 'size', 'nunique'])
piRSquared 2017-08-18

또는df[['dID','hID']].groupby(df['mID']).agg(['count', 'size', 'nunique'])
piRSquared aug

1
또는df.groupby('mID')[['dID', 'hID']].agg(['count', 'size', 'nunique'])
piRSquared aug

답변:


193

고유 값을 세고 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

74

데이터가 데이터 프레임의 이름이라고 가정하면 다음을 수행 할 수 있습니다.

data['race'].value_counts()

이렇게하면 고유 한 요소와 발생 횟수가 표시됩니다.


각 고유 항목에 대한 비율을 원한다면 할 수도 있습니다. data['race'].value_counts(normalize=True)
bogus

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

당신은 항상 할 수있었습니다 agggroupby. stack프레젠테이션이 더 마음에 들어서 마지막에 사용 했습니다.

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

@AlhpaDelta 나는 끝에 무언가를 추가했습니다. 도움이되기를 바랍니다
piRSquared


0

열의 고유 값 (예 : hIDdataframe df)을 계산하려면 다음을 사용하십시오.

len(df.hID.unique())

-3

len 함수를 사용하여 고유 한 속성을 사용할 수 있습니다.

len (df [ 'hID']. unique ()) 5

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.