programing

데이터 프레임 열에서 값이 발생하는 빈도 카운트

itsource 2022. 10. 4. 23:01
반응형

데이터 프레임 열에서 값이 발생하는 빈도 카운트

데이터셋이 있습니다.

category
cat a
cat b
cat a

(고유값과 빈도를 표시)와 같은 것을 반환할 수 있으면 좋겠습니다.

category   freq 
cat a       2
cat b       1

@DSM 코멘트로 사용합니다.

In [37]:
df = pd.DataFrame({'a':list('abssbab')})
df['a'].value_counts()

Out[37]:

b    3
a    2
s    2
dtype: int64

또한.groupby그리고.count여기서 고양이 가죽을 벗기는 방법은 여러 가지가 있습니다.

In [38]:
df.groupby('a').count()

Out[38]:

   a
a   
a  2
b  3
s  2

[3 rows x 1 columns]

온라인 문서를 참조하십시오.

원래 데이터 프레임 사용에 주파수를 다시 추가하고 싶은 경우transform정렬된 인덱스를 반환하려면:

In [41]:
df['freq'] = df.groupby('a')['a'].transform('count')
df

Out[41]:

   a freq
0  a    2
1  b    3
2  s    2
3  s    2
4  b    3
5  a    2
6  b    3

[7 rows x 2 columns]

모든 열에 적용하려는 경우 다음을 사용할 수 있습니다.

df.apply(pd.value_counts)

그러면 각 열에 열 기반 집계 함수(이 경우 value_counts)가 적용됩니다.

df.category.value_counts()

이 짧은 코드 행이 원하는 출력을 제공합니다.

열 이름에 공백이 있는 경우 사용할 수 있습니다.

df['category'].value_counts()
df.apply(pd.value_counts).fillna(0)

value_counts - 고유한 값의 카운트를 포함하는 개체를 반환합니다.

적용 - 모든 열의 빈도를 카운트합니다.설정했을 경우axis=1모든 행에 빈도가 표시됩니다.

fillna(0) - 출력을 더욱 화려하게 만듭니다.NaN을 0으로 변경했습니다.

0.18.1의 경우groupby와 함께count는, 일의의 값의 빈도를 나타내지 않습니다.

>>> df
   a
0  a
1  b
2  s
3  s
4  b
5  a
6  b

>>> df.groupby('a').count()
Empty DataFrame
Columns: []
Index: [a, b, s]

단, 고유값과 빈도는 다음과 같이 쉽게 결정됩니다.size:

>>> df.groupby('a').size()
a
a    2
b    3
s    2

와 함께df.a.value_counts()정렬된 값(내림차순, 즉 가장 큰 값 먼저)이 기본적으로 반환됩니다.

df의 여러 열에 대해 목록 이해 및 value_counts 사용

[my_series[c].value_counts() for c in list(my_series.select_dtypes(include=['O']).columns)]

https://stackoverflow.com/a/28192263/786326

DataFrame에 같은 유형의 값이 있는 경우 다음과 같이 설정할 수도 있습니다.return_counts=Truenumpy.disclos로

index, counts = np.unique(df.values,return_counts=True)

이 정수일 경우 np.bincount()가 더 빠를 수 있습니다.

모두가 말했듯이, 보다 빠른 해결책은 다음과 같습니다.

df.column_to_analyze.value_counts()

단, 이 스키마를 사용하여 데이터 프레임의 출력을 사용하는 경우:

df input:

category
cat a
cat b
cat a

df output: 

category   counts
cat a        2
cat b        1 
cat a        2

다음과 같이 할 수 있습니다.

df['counts'] = df.category.map(df.category.value_counts())
df 

먼저 카테고리로 칼럼을 방송하여 판다와 함께 이 작업을 수행할 수도 있습니다.dtype="category"예.

cats = ['client', 'hotel', 'currency', 'ota', 'user_country']

df[cats] = df[cats].astype('category')

그리고 나서 전화한다.describe:

df[cats].describe()

이렇게 하면 값 카운트와 더 많은 값을 알 수 있습니다. : )

    client  hotel   currency    ota user_country
count   852845  852845  852845  852845  852845
unique  2554    17477   132 14  219
top 2198    13202   USD Hades   US
freq    102562  8847    516500  242734  340992

라이브러리가 없는 경우 대신 다음을 수행할 수 있습니다.

def to_frequency_table(data):
    frequencytable = {}
    for key in data:
        if key in frequencytable:
            frequencytable[key] += 1
        else:
            frequencytable[key] = 1
    return frequencytable

예제:

to_frequency_table([1,1,1,1,2,3,4,4])
>>> {1: 4, 2: 1, 3: 1, 4: 2}

모든 Data Frame 컬럼리스트에서 정상적으로 동작할 수 있다고 생각합니다.

def column_list(x):
    column_list_df = []
    for col_name in x.columns:
        y = col_name, len(x[col_name].unique())
        column_list_df.append(y)
return pd.DataFrame(column_list_df)

column_list_df.rename(columns={0: "Feature", 1: "Value_count"})

"column_list" 함수는 열 이름을 확인한 후 각 열 값의 고유성을 확인합니다.

@metatoaster는 이미 이 점을 지적했습니다.에 도전하다Counter불타오르고 있어요

import pandas as pd
from collections import Counter
import timeit
import numpy as np

df = pd.DataFrame(np.random.randint(1, 10000, (100, 2)), columns=["NumA", "NumB"])

타이머

%timeit -n 10000 df['NumA'].value_counts()
# 10000 loops, best of 3: 715 µs per loop

%timeit -n 10000 df['NumA'].value_counts().to_dict()
# 10000 loops, best of 3: 796 µs per loop

%timeit -n 10000 Counter(df['NumA'])
# 10000 loops, best of 3: 74 µs per loop

%timeit -n 10000 df.groupby(['NumA']).count()
# 10000 loops, best of 3: 1.29 ms per loop

건배!

다음 코드는 "smaller_dat1"이라는 데이터 프레임의 "Total_score"라는 열에 있는 다양한 값에 대한 빈도 테이블을 만든 다음 값 "300"이 열에 나타나는 횟수를 반환합니다.

valuec = smaller_dat1.Total_score.value_counts()
valuec.loc[300]
n_values = data.income.value_counts()

첫 번째 고유 값 수

n_at_most_50k = n_values[0]

두 번째 고유 값 수

n_greater_50k = n_values[1]

n_values

출력:

<=50K    34014
>50K     11208

Name: income, dtype: int64

출력:

n_greater_50k,n_at_most_50k:-
(11208, 34014)
your data:

|category|
cat a
cat b
cat a

솔루션:

 df['freq'] = df.groupby('category')['category'].transform('count')
 df =  df.drop_duplicates()

언급URL : https://stackoverflow.com/questions/22391433/count-the-frequency-that-a-value-occurs-in-a-dataframe-column

반응형