반응형
판다와 함께 그룹별 고유값 계산
일의로 계산해야 합니다.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_duplicates
a를 반환하다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
내가 정확히 이해했다면, 당신은 다른 숫자의ID
s 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 |