programing

팬더 그룹을 사용하여 고유 값을 계산합니다.

anycallme 2023. 11. 2. 22:04

팬더 그룹을 사용하여 고유 값을 계산합니다.

다음 양식의 데이터를 가지고 있습니다.

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