source

특정 값의 발생 수를 세는 Python Panda

ittop 2023. 8. 20. 12:39
반응형

특정 값의 발생 수를 세는 Python Panda

특정 값이 한 열에 나타나는 횟수를 찾으려고 합니다.

데이터 프레임을 만들었습니다.data = pd.DataFrame.from_csv('data/DataSet2.csv')

그리고 이제 열에 어떤 것이 나타나는 횟수를 찾고 싶습니다.어떻게 하는 거지?

저는 아래와 같이 교육란을 보고 시간을 세고 있는 줄 알았습니다.?일어나다.

아래 코드는 제가 횟수를 찾으려고 한다는 것을 보여줍니다.9th코드를 실행하면 오류가 나타납니다.

코드

missing2 = df.education.value_counts()['9th']
print(missing2)

오류

KeyError: '9th'

생성할 수 있습니다.subset사용자의 상태와 함께 데이터를 사용합니다.len:

print df
  col1 education
0    a       9th
1    b       9th
2    c       8th

print df.education == '9th'
0     True
1     True
2    False
Name: education, dtype: bool

print df[df.education == '9th']
  col1 education
0    a       9th
1    b       9th

print df[df.education == '9th'].shape[0]
2
print len(df[df['education'] == '9th'])
2

성능은 흥미롭지만 가장 빠른 솔루션은 numpy 어레이를 비교하는 것입니다.sum:

graph

코드:

import perfplot, string
np.random.seed(123)


def shape(df):
    return df[df.education == 'a'].shape[0]

def len_df(df):
    return len(df[df['education'] == 'a'])

def query_count(df):
    return df.query('education == "a"').education.count()

def sum_mask(df):
    return (df.education == 'a').sum()

def sum_mask_numpy(df):
    return (df.education.values == 'a').sum()

def make_df(n):
    L = list(string.ascii_letters)
    df = pd.DataFrame(np.random.choice(L, size=n), columns=['education'])
    return df

perfplot.show(
    setup=make_df,
    kernels=[shape, len_df, query_count, sum_mask, sum_mask_numpy],
    n_range=[2**k for k in range(2, 25)],
    logx=True,
    logy=True,
    equality_check=False, 
    xlabel='len(df)')

몇 가지 방법 사용count또는sum

In [338]: df
Out[338]:
  col1 education
0    a       9th
1    b       9th
2    c       8th

In [335]: df.loc[df.education == '9th', 'education'].count()
Out[335]: 2

In [336]: (df.education == '9th').sum()
Out[336]: 2

In [337]: df.query('education == "9th"').education.count()
Out[337]: 2

의 발생을 세는 우아한 방법'?'또는 열에 있는 기호는 데이터 프레임 개체의 내장 함수를 사용하는 것입니다.

'Automobile' 데이터 세트를 로드했다고 가정합니다.df물건.결측값이 포함된 열을 알 수 없습니다('?'기호), 다음을 수행합니다.

df.isin(['?']).sum(axis=0)

DataFrame.isin(values)공식 문서에는 다음과 같이 나와 있습니다.

DataFrame의 각 요소가 값에 포함되어 있는지 여부를 보여주는 부울 DataFrame을 반환합니다.

참고:isin반복 가능한 항목을 입력으로 허용하므로 대상 기호가 포함된 목록을 이 함수에 전달해야 합니다.df.isin(['?'])는 다음과 같이 부울 데이터 프레임을 반환합니다.

    symboling   normalized-losses   make    fuel-type   aspiration-ratio ...
0   False       True                False   False       False
1   False       True                False   False       False
2   False       True                False   False       False
3   False       False               False   False       False
4   False       False               False   False       False
5   False       True                False   False       False
...

각 열의 대상 기호 발생 횟수를 계산하려면 다음과 같이 하십시오.sum위 데이터 프레임의 모든 행에 대해 다음과 같이 표시합니다.axis=0최종(잘린) 결과는 우리가 기대하는 것을 보여줍니다.

symboling             0
normalized-losses    41
...
bore                  4
stroke                4
compression-ratio     0
horsepower            2
peak-rpm              2
city-mpg              0
highway-mpg           0
price                 4

사용해 보십시오.

(df[education]=='9th').sum()

쉽지만 효율적이지 않음:

list(df.education).count('9th')

Pandas 데이터 프레임의 열에서 발생(고유 값)을 카운트하는 간단한 예제:

import pandas as pd

# URL to .csv file 
data_url = 'https://yoursite.com/Arrests.csv'
# Reading the data 
df = pd.read_csv(data_url, index_col=0)
# pandas count distinct values in column 
df['education'].value_counts()

출력:

Education        47516 
9th              41164 
8th              25510 
7th              25198 
6th              25047                       
...  
3rd                 2 
2nd                 2 
1st                 2 
Name: name, Length: 190, dtype: int64

열의 특정 값을 찾기 위해 아래 코드를 사용할 수 있습니다.

선호도에 상관없이 원하는 방법을 사용할 수 있습니다.

df.col_name.value_counts().Value_you_are_looking_for

타이타닉 데이터 세트의 예를 들어보겠습니다.

df.Sex.value_counts().male

이것은 배에 있는 모든 남성의 수를 제공합니다. 숫자 데이터를 계산하려면 위의 방법을 사용할 수 없습니다. value_counts()는 일련의 데이터 유형에만 사용되므로 실패하기 때문입니다. 따라서 두 번째 방법 예제를 사용할 수 있습니다.

두 번째 방법은 입니다.

#this is an example method of counting on a data frame
df[(df['Survived']==1)&(df['Sex']=='male')].counts()

이것은 value_()counts만큼 효율적이지는 않지만 데이터 프레임의 값을 세고 싶다면 확실히 도움이 될 것입니다.

편집 - 중간에 공백이 있는 항목을 찾으십시오.

사용할 수 있습니다.

df.country.count('united states').

저는 이것이 더 쉬운 해결책이 될 수 있다고 생각합니다.다음과 같은 데이터 프레임이 있다고 가정합니다.

DATE        LANG        POSTS
2008-07-01  c#          3
2008-08-01  assembly    8
2008-08-01  javascript  2
2008-08-01  c           85
2008-08-01  python      11
2008-07-01  c#          3
2008-08-01  assembly    8
2008-08-01  javascript  62
2008-08-01  c           85
2008-08-01  python      14

다음과 같이 LANG 항목의 합계가 발생하는 것을 확인할 수 있습니다.

df.groupby('LANG').sum()

그리고 당신은 각각의 개별 언어의 합을 가질 것입니다.

언급URL : https://stackoverflow.com/questions/35277075/python-pandas-counting-the-occurrences-of-a-specific-value

반응형