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