반응형
판다와 함께 그룹별 고유값 계산
일의로 계산해야 합니다.ID모든 것의 가치관domain.
데이터가 있습니다.
ID, domain
123, 'vk.com'
123, 'vk.com'
123, 'twitter.com'
456, 'vk.com'
456, 'facebook.com'
456, 'vk.com'
456, 'google.com'
789, 'twitter.com'
789, 'vk.com'
나는 노력한다df.groupby(['domain', 'ID']).count()
하지만 나는 받고 싶어요
domain, count
vk.com 3
twitter.com 2
facebook.com 1
google.com 1
필요한 것은 다음과 같습니다.
df = df.groupby('domain')['ID'].nunique()
print (df)
domain
'facebook.com' 1
'google.com' 1
'twitter.com' 2
'vk.com' 3
Name: ID, dtype: int64
필요한 경우 '문자:
df = df.ID.groupby([df.domain.str.strip("'")]).nunique()
print (df)
domain
facebook.com 1
google.com 1
twitter.com 2
vk.com 3
Name: ID, dtype: int64
df.groupby(df.domain.str.strip("'"))['ID'].nunique()
다음과 같이 열 이름을 유지할 수 있습니다.
df = df.groupby(by='domain', as_index=False).agg({'ID': pd.Series.nunique})
print(df)
domain ID
0 fb 1
1 ggl 1
2 twitter 2
3 vk 3
다른 점은 말이다.nunique()시리즈를 반환하고agg()Data Frame을 반환합니다.
일반적으로 단일 열의 고유한 값을 카운트하려면 다음과 같이 사용할 수 있습니다.
df.domain.value_counts()
#'vk.com' 5
#'twitter.com' 2
#'facebook.com' 1
#'google.com' 1
#Name: domain, dtype: int64
컬럼의 고유값 수를 표시하려면 다음 명령을 사용합니다.
df.domain.nunique()
# 4
이러한 모든 고유값을 얻으려면 , 또는 를 사용할 수 있습니다.두 함수의 약간의 차이는 다음과 같습니다.unique을 반환하다numpy.array하는 동안에drop_duplicatesa를 반환하다pandas.Series:
df.domain.unique()
# array(["'vk.com'", "'twitter.com'", "'facebook.com'", "'google.com'"], dtype=object)
df.domain.drop_duplicates()
#0 'vk.com'
#2 'twitter.com'
#4 'facebook.com'
#6 'google.com'
#Name: domain, dtype: object
이 문제에 대해서는 다른 변수에 대해 다른 값을 세고 싶기 때문에,groupby여기서 다른 답변에 의해 제공되는 방법, 먼저 중복을 드롭하고 나서 할 수도 있습니다.value_counts():
import pandas as pd
df.drop_duplicates().domain.value_counts()
# 'vk.com' 3
# 'twitter.com' 2
# 'facebook.com' 1
# 'google.com' 1
# Name: domain, dtype: int64
df.domain.value_value()
>>> df.domain.value_counts()
vk.com 5
twitter.com 2
google.com 1
facebook.com 1
Name: domain, dtype: int64
내가 정확히 이해했다면, 당신은 다른 숫자의IDs for everydomain그럼, 다음의 조작을 실시해 주세요.
output = df.drop_duplicates()
output.groupby('domain').size()
출력:
domain
facebook.com 1
google.com 1
twitter.com 2
vk.com 3
dtype: int64
또,value_counts효율이 약간 떨어집니다.하지만 제일 좋은 건 제즈라엘의 대답이야nunique:
%timeit df.drop_duplicates().groupby('domain').size()
1000 loops, best of 3: 939 µs per loop
%timeit df.drop_duplicates().domain.value_counts()
1000 loops, best of 3: 1.1 ms per loop
%timeit df.groupby('domain')['ID'].nunique()
1000 loops, best of 3: 440 µs per loop
언급URL : https://stackoverflow.com/questions/38309729/count-unique-values-per-groups-with-pandas
반응형
'programing' 카테고리의 다른 글
| 선언된 패키지가 예상 패키지 ""와 일치하지 않습니다. (0) | 2023.01.29 |
|---|---|
| Vue 애플리케이션에서 중첩된 작업을 테스트하려면 어떻게 해야 합니까? (0) | 2023.01.29 |
| PHP에서 오류 로그 파일에 쓰는 방법 (0) | 2023.01.29 |
| JUnit과 Hamcrest를 함께 사용하는 방법은? (0) | 2023.01.29 |
| mapstate의 데이터가 로드를 마칠 때까지 기다립니다. (0) | 2023.01.29 |