Python Pandas Подсчет объектов определенного значения

Я пытаюсь найти количество раз, когда определенное значение появляется в одном столбце.

Я сделал dataframe с data = pd.DataFrame.from_csv('data/DataSet2.csv')

и теперь я хочу узнать, сколько раз что-то появляется в столбце. Как это сделать?

Я думал, что это было ниже, где я смотрю в колонке образования и подсчитываю количество времени ? происходит.

Приведенный ниже код показывает, что я пытаюсь найти число раз, когда появляется 9th, и ошибка возникает при запуске кода.

Код

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

ошибка

KeyError: '9th'

Ответ 1

IIUC вы можете создать subset данных с вашим состоянием, а затем использовать shape или 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)')

Ответ 2

Пара способов использования 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

Ответ 3

Попробуй это:

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

Ответ 4

Элегантный способ подсчитать возникновение '?' или любой символ в любом столбце, должен использовать встроенную функцию isin объекта dataframe.

Предположим, что мы загрузили набор данных '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