반응형
팬더 수 (고유 한)
여러 데이터베이스 (oracle, mssql 등)가 있으므로 팬더를 db 대체물로 사용하고 있으며 SQL과 동등한 일련의 명령을 만들 수 없습니다.
몇 가지 열이있는 DataFrame에 테이블이로드되었습니다.
YEARMONTH, CLIENTCODE, SIZE, .... etc etc
SQL에서 매년 다른 클라이언트의 수를 계산하는 것은 다음과 같습니다.
SELECT count(distinct CLIENTCODE) FROM table GROUP BY YEARMONTH;
결과는
201301 5000
201302 13245
팬더에서 어떻게 할 수 있습니까?
나는 이것이 당신이 원하는 것이라고 믿습니다.
table.groupby('YEARMONTH').CLIENTCODE.nunique()
예:
In [2]: table
Out[2]:
CLIENTCODE YEARMONTH
0 1 201301
1 1 201301
2 2 201301
3 1 201302
4 2 201302
5 2 201302
6 3 201302
In [3]: table.groupby('YEARMONTH').CLIENTCODE.nunique()
Out[3]:
YEARMONTH
201301 2
201302 3
여기에 매우 간단한 또 다른 방법이 있습니다. 데이터 프레임 이름이 daat
있고 열 이름이YEARMONTH
daat.YEARMONTH.value_counts()
흥미롭게도, 종종 len(unique())
보다 몇 배 (3x-15x) 빠릅니다 nunique()
.
를 사용하면 crosstab
보다 많은 정보를 반환합니다groupby
nunique
pd.crosstab(df.YEARMONTH,df.CLIENTCODE)
Out[196]:
CLIENTCODE 1 2 3
YEARMONTH
201301 2 1 0
201302 1 2 1
약간 수정 한 후 결과를 얻습니다.
pd.crosstab(df.YEARMONTH,df.CLIENTCODE).ne(0).sum(1)
Out[197]:
YEARMONTH
201301 2
201302 3
dtype: int64
나는 또한 사용하고 nunique
있지만 'min', 'max', 'count' or 'mean'
등 의 집계 함수를 사용해야하는 경우 매우 유용합니다 .
df.groupby('YEARMONTH')['CLIENTCODE'].transform('nunique') #count(distinct)
df.groupby('YEARMONTH')['CLIENTCODE'].transform('min') #min
df.groupby('YEARMONTH')['CLIENTCODE'].transform('max') #max
df.groupby('YEARMONTH')['CLIENTCODE'].transform('mean') #average
df.groupby('YEARMONTH')['CLIENTCODE'].transform('count') #count
새로운 팬더 버전을 사용하면 데이터 프레임으로 쉽게 얻을 수 있습니다.
unique_count = pd.groupby(['YEARMONTH'], as_index=False).agg(uniq_CLIENTCODE =('CLIENTCODE',pd.Series.count))
참고 URL : https://stackoverflow.com/questions/15411158/pandas-countdistinct-equivalent
반응형
'Programing' 카테고리의 다른 글
HTML 'hidden'과 'aria-hidden'속성의 차이점은 무엇입니까? (0) | 2020.04.16 |
---|---|
Java 제네릭 형식 삭제 : 언제 그리고 어떻게됩니까? (0) | 2020.04.16 |
iPhone 숫자 패드에 "완료"버튼을 표시하는 방법 (0) | 2020.04.15 |
문자열 앞에 $는 무엇을 의미합니까? (0) | 2020.04.15 |
터미널 출력의 라인 수 (0) | 2020.04.15 |