팬더 그룹을 사용하여 고유 값을 계산합니다.
다음 양식의 데이터를 가지고 있습니다.
df = pd.DataFrame({
'group': [1, 1, 2, 3, 3, 3, 4],
'param': ['a', 'a', 'b', np.nan, 'a', 'a', np.nan]
})
print(df)
# group param
# 0 1 a
# 1 1 a
# 2 2 b
# 3 3 NaN
# 4 3 a
# 5 3 a
# 6 4 NaN
그룹 내의 null이 아닌 값은 항상 동일합니다.각 그룹에 대한 null이 아닌 값(존재하는 위치)을 한 번 카운트한 다음 각 값에 대한 총 카운트를 찾습니다.
저는 현재 이 작업을 다음과 같은 방식으로 수행하고 있습니다.
param = []
for _, group in df[df.param.notnull()].groupby('group'):
param.append(group.param.unique()[0])
print(pd.DataFrame({'param': param}).param.value_counts())
# a 2
# b 1
루프를 사용하지 않고 좀 더 깨끗하게 할 수 있는 방법이 있을 거라고 확신하지만, 도저히 해결할 수 없을 것 같습니다.어떤 도움이라도 주시면 감사하겠습니다.
다음을 사용할 수 있다고 생각합니다.
print (df.groupby('param')['group'].nunique())
param
a 2
b 1
Name: group, dtype: int64
를 사용하여 새 솔루션을 만듭니다.df기준, 모양 변경Series마지막까지:
a = df[df.param.notnull()].groupby('group')['param'].unique()
print (pd.DataFrame.from_records(a.values.tolist()).stack().value_counts())
a 2
b 1
dtype: int64
이는 고유 값뿐만 아니라 다른 Aggregate 함수를 계산하려는 경우 솔루션에 대한 추가 기능일 뿐입니다.
df.groupby(['group']).agg(['min', 'max', 'count', 'nunique'])
위의 답변들도 가능하지만, 기존 데이터 프레임에 unique_counts가 있는 열을 추가하고자 하는 경우 변환을 사용하면 됩니다.
df['distinct_count'] = df.groupby(['param'])['group'].transform('nunique')
출력:
group param distinct_count
0 1 a 2.0
1 1 a 2.0
2 2 b 1.0
3 3 NaN NaN
4 3 a 2.0
5 3 a 2.0
6 4 NaN NaN
@jezrail이 호명한 무리의 수를 확인하는 것입니다.
print (df.groupby('param')['group'].nunique())
param
a 2
b 1
Name: group, dtype: int64
이 글이 올라온 지 꽤 됐지만, 이것도 도움이 될 것 같습니다.고유 값을 세고 이 고유 값의 개수로 그룹을 필터링하려고 했습니다. 이렇게 했습니다.
df.groupby('group').agg(['min','max','count','nunique']).reset_index(drop=False)
이 방법은 보다 빠르고 편리합니다.
df.groupby('param').agg({'group':lambda x: len(pd.unique(x))})
언급URL : https://stackoverflow.com/questions/41415017/count-unique-values-using-pandas-groupby
'programing' 카테고리의 다른 글
| 배열(또는 문자열)에 unique가 아닌 값이 있는 경우 ng-repeat가 작동하지 않음 (0) | 2023.11.02 |
|---|---|
| ui-router가 있는 각 재질의 탭당 별도의 컨트롤러 (0) | 2023.11.02 |
| 오라클에서 변수에 카운트 선택 (0) | 2023.11.02 |
| 이름으로 프로세스를 죽입니까? (0) | 2023.11.02 |
| MariaDB / TokuDB의 "Too many keys specified; max 64 keys allowed" 오류에 대한 해결 방법? (0) | 2023.11.02 |