Pandas сколько раз встречается значение в столбце
Перейти к содержимому

Pandas сколько раз встречается значение в столбце

  • автор:

Pandas: как подсчитать вхождения определенного значения в столбце

Вы можете использовать следующий синтаксис для подсчета вхождений определенного значения в столбце кадра данных pandas:

df['column_name']. value_counts ()[ value ] 

Обратите внимание, что значение может быть как числом, так и символом.

В следующих примерах показано, как использовать этот синтаксис на практике.

Пример 1. Подсчет вхождений строки в столбце

В следующем коде показано, как подсчитать количество вхождений определенной строки в столбце кадра данных pandas:

import pandas as pd #create DataFrame df = pd.DataFrame() #count occurrences of the value 'B' in the 'team' column df['team']. value_counts ()['B'] 4 

Из вывода мы видим, что строка «B» встречается 4 раза в столбце «команда».

Обратите внимание, что мы также можем использовать следующий синтаксис, чтобы узнать, как часто каждое уникальное значение встречается в столбце «команда»:

#count occurrences of every unique value in the 'team' column df['team']. value_counts () B 4 A 2 C 2 Name: team, dtype: int64 

Пример 2. Подсчет вхождений числового значения в столбце

В следующем коде показано, как подсчитать количество вхождений числового значения в столбце кадра данных pandas:

import pandas as pd #create DataFrame df = pd.DataFrame() #count occurrences of the value 9 in the 'assists' column df['assists']. value_counts ()[ 9 ] 3 

Из вывода мы видим, что значение 9 встречается 3 раза в столбце «ассисты».

Мы также можем использовать следующий синтаксис, чтобы узнать, как часто каждое уникальное значение встречается в столбце «помощь»:

#count occurrences of every unique value in the 'assists' column df['assists']. value_counts () 9 3 7 2 5 1 12 1 4 1 Name: assists, dtype: int64 

Из вывода мы видим:

  • Значение 9 встречается 3 раза.
  • Значение 7 встречается 2 раза.
  • Значение 5 встречается 1 раз.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:

8 примеров использования value_counts из Pandas

Прежде чем начинать работать над проектом, связанным с данными, нужно посмотреть на набор данных. Разведочный анализ данных (EDA) — очень важный этап, ведь данные могут быть запутанными, и очень многое может пойти не по плану в процессе работы.

В библиотеке Pandas есть несколько функций для решения этой проблемы, и value_counts — одна из них. Она возвращает объект, содержащий уникальные значения из dataframe Pandas в отсортированном порядке. Однако многие забывают об этой возможности и используют параметры по умолчанию. В этом материале посмотрим, как получить максимум пользы от value_counts , изменив параметры по умолчанию.

Что такое функция value_counts()?

Функция value_counts() используется для получения Series , содержащего уникальные значения. Она вернет результат, отсортированный в порядке убывания, так что первый элемент в коллекции будет самым встречаемым. NA-значения не включены в результат.

Синтаксис
df[‘your_column’].value_counts() — вернет количество уникальных совпадений в определенной колонке.

Важно заметить, что value_counts работает только с series, но не dataframe. Поэтому нужно указать одни квадратные скобки df[‘your_column’] , а не пару df[[‘your_column’]] .

Параметры:

  • normalize (bool, по умолчанию False) — если True , то возвращаемый объект будет содержать значения относительно частоты встречаемых значений.
  • sort (bool, по умолчанию True) — сортировка по частоте.
  • ascending (bool, по умолчанию False) — сортировка по возрастанию.
  • bins (int) — вместе подсчета значений группирует их по отрезкам, но это работает только с числовыми данными.
  • dropna (bool, по умолчанию True) — не включать количество NaN.

Загрузка данных для демонстрации

Рассмотрим, как использовать этот метод на реальных данных. Возьмем в качестве примера датасет из курса Coursera на Kaggle.

Для начала импортируем нужные библиотеки и сами данные. Это нужно в любом проекте. После этого проанализируем данные в notebook Jupyter.

 
# импорт библиотеки import pandas as pd # Загрузка данных df = pd.read_csv('Downloads/coursea_data.csv', index_col=0) # проверка данных из csv df.head(10)

8 примеров использования value_counts из Pandas

Проверьте, сколько записей в датасете и есть ли у нас пропуски.

 
df.info()

Результат показывает, что в наборе 981 запись, и нет ни одного NA.

 Int64Index: 891 entries, 134 to 163 Data columns (total 6 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 course_title 891 non-null object 1 course_organization 891 non-null object 2 course_Certificate_type 891 non-null object 3 course_rating 891 non-null float64 4 course_difficulty 891 non-null object 5 course_students_enrolled 891 non-null object dtypes: float64(1), object(5) memory usage: 48.7+ KB

1. value_counts с параметрами по умолчанию

Теперь можно начинать использовать функцию value_counts . Начнем с базового применения функции.

Синтаксис: df['your_column'].value_counts() .

Получим количество каждого значения для колонки «course_difficulty».

Функция value_counts вернет количество совпадений всех уникальных значений по заданному индексу без пропусков. Это позволит увидеть, что больше всего курсов с уровнем сложности «Начинающий», после этого идут «Средний» и «Смешанный». А «Сложный» на последнем месте.

df['course_difficulty'].value_counts() --------------------------------------------------- Beginner 487 Intermediate 198 Mixed 187 Advanced 19 Name: course_difficulty, dtype: int64

Теперь время поработать с параметрами.

2. Сортировка по возрастанию

По умолчанию value_counts() возвращает данные по убыванию. Изменит поведение можно, задав значение True для параметра ascending .

Синтаксис: df['your_column'].value_counts(ascending=True) .

df['course_difficulty'].value_counts(ascending=True) --------------------------------------------------- Advanced 19 Mixed 187 Intermediate 198 Beginner 487 Name: course_difficulty, dtype: int64

3. Сортировка в алфавитном порядке

В определенных случаях может существовать необходимость отсортировать записи в алфавитном порядке. Это делается с помощью добавления sort_index(ascending=True) после value_counts() .

По умолчанию функция сортирует «course_difficulty» по количеству совпадений, а с sort_index сортирует по индексу (имени колонки, для которой и используется функция):

df['course_difficulty'].value_counts().sort_index(ascending=True) --------------------------------------------------- Advanced 19 Beginner 487 Intermediate 198 Mixed 187 Name: course_difficulty, dtype: int64

Если же требуется отобразить value_counts() в обратном алфавитном порядке, то нужно изменить направление сортировки: .sort_index(ascending=False) .

4. Сортировка по значению, а затем по алфавиту

Для этого примера используем другой датасет.

 
df_fruit = pd.DataFrame(< 'fruit': ['хурма']*5 + ['яблоки']*5 + ['бананы']*3 + ['персики']*3 + ['морковь']*3 + ['абрикосы'] + ['манго']*2 >)

Так, нужно получить вывод, отсортированный в первую очередь по количеству совпадений значений, а потом уже и по алфавиту. Это можно сделать, объединив value_counts() c sort_index(ascending=False) и sort_values(ascending=False) .

df_fruit['fruit'].value_counts()\ .sort_index(ascending=False)\ .sort_values(ascending=False) ------------------------------------------------- хурма 5 яблоки 5 бананы 3 морковь 3 персики 3 манго 2 абрикосы 1 Name: fruit, dtype: int64

5. Относительная частота уникальных значений

Иногда нужно получить относительные значения, а не просто количество. С параметром normalize=True объект вернет относительную частоту уникальных значений. По умолчанию значение этого параметра равно False .

Синтаксис: df['your_column'].value_counts(normalize=True) .

df['course_difficulty'].value_counts(normalize=True) ------------------------------------------------- Beginner 0.546577 Intermediate 0.222222 Mixed 0.209877 Advanced 0.021324 Name: course_difficulty, dtype: float64

6. value_counts() для разбивки данных на дискретные интервалы

Еще один трюк, который часто игнорируют. value_counts() можно использовать для разбивки данных на дискретные интервалы с помощью параметра bin . Это работает только с числовыми данными. Принцип напоминает pd.cut . Посмотрим как это работает на примере колонки «course_rating». Сгруппируем значения колонки на 4 группы.

Синтаксис: df['your_column'].value_counts(bin=количество групп) .

df['course_rating'].value_counts(bins=4) ------------------------------------------------- (4.575, 5.0] 745 (4.15, 4.575] 139 (3.725, 4.15] 5 (3.297, 3.725] 2 Name: course_rating, dtype: int64

Бинниг позволяет легко получить инсайты. Так, можно увидеть, что большая часть людей оценивает курс на 4.5. И лишь несколько курсов имеют оценку ниже 4.15.

7. value_counts() с пропусками

По умолчанию количество значений NaN не включается в результат. Но это поведение можно изменить, задав значение False для параметра dropna . Поскольку в наборе данных нет нулевых значений, в этом примере это ни на что не повлияет. Но сам параметр следует запомнить.

Синтаксис: df['your_column'].value_counts(dropna=False) .

8. value_counts() как dataframe

Как уже было отмечено, value_counts() возвращает Series, а не Dataframe. Если же нужно получить результаты в последнем виде, то для этого можно использовать функцию .to_frame() после .value_counts() .

Синтаксис: df['your_column'].value_counts().to_frame() .

Это будет выглядеть следующим образом:

value_counts() как dataframe

Если нужно задать имя для колонки или переименовать существующую, то эту конвертацию можно реализовать другим путем.

 
value_counts = df['course_difficulty'].value_counts() # преобразование в df и присвоение новых имен колонкам df_value_counts = pd.DataFrame(value_counts) df_value_counts = df_value_counts.reset_index() df_value_counts.columns = ['unique_values', 'counts for course_difficulty'] df_value_counts

Groupby и value_counts

Groupby — очень популярный метод в Pandas. С его помощью можно сгруппировать результат по одной колонке и посчитать значения в другой.

Синтаксис: df.groupby('your_column_1')['your_column_2'].value_counts() .

Так, с помощью groupby и value_counts можно посчитать количество типов сертификатов для каждого уровня сложности курсов.

df.groupby('course_difficulty')['course_Certificate_type'].value_counts() ------------------------------------------------- course_difficulty course_Certificate_type Advanced SPECIALIZATION 10 COURSE 9 Beginner COURSE 282 SPECIALIZATION 196 PROFESSIONAL CERTIFICATE 9 Intermediate COURSE 104 SPECIALIZATION 91 PROFESSIONAL CERTIFICATE 3 Mixed COURSE 187 Name: course_Certificate_type, dtype: int64

Это мульти-индекс, позволяющий иметь несколько уровней индексов в dataframe. В этом случае сложность курса соответствует нулевому уровню индекса, а тип сертификата — первому.

Фильтрация значений по минимум и максимум

Работая с набором данных, может потребоваться вернуть количество ограниченных вхождений с помощью value_counts() .

Синтаксис: df['your_column'].value_counts().loc[lambda x : x > 1] .

Этот код отфильтрует все значения уникальных данных и покажет только те, где значение больше единицы.

Для примера ограничим рейтинг курса значением 4.

df.groupby('course_difficulty')['coudf['course_rating']\ .value_counts().loc[lambda x: x > 4] ------------------------------------------------- 4.8 256 4.7 251 4.6 168 4.5 80 4.9 68 4.4 34 4.3 15 4.2 10 Name: course_rating, dtype: int64

value_counts() — удобный инструмент, позволяющий делать удобный анализ в одну строку.

Тест на знание функции value_counts

Дана колонка с днями недели, где 1 - понедельник, 7 - воскресенье. Как получить относительное количество только будних дней?

Сколько раз заданное слово встречается в списке

Определить, сколько раз в тексте встречается заданное слово
Пламенный привет, такая вот проблема ниже 🙂 нужно сделать на phyton Вариант 9 Определить.

Сколько раз в списке встречается наибольшее значение?
Народ,есть функция print, которая выводит максимальное значения списка. А как сделать так, чтобы.

Линейный поиск: определить, сколько раз встречается заданное число Х в данном массиве
Напишите программу, которая определяет, сколько раз встречается заданное число x в данном массиве.

Посчитать сколько раз слово встречается в строке
Напишите функцию, которая получает строку и слово и возвращает сколько раз данное слово вручается в.

709 / 348 / 120
Регистрация: 09.12.2020
Сообщений: 919

Лучший ответ

Сообщение было отмечено axeod как решение

Решение

a = [250, 400, 50.5, 100.0, 'Hello', 600, 700, 'Hello', 222, 555, 888, 'Hello', 'Hello'] print(a.count('Hello'))

Добавлено через 20 секунд

1 2 3 4 5 6 7 8
a = [250, 400, 50.5, 100.0, 'Hello', 600, 700, 'Hello', 222, 555, 888, 'Hello', 'Hello'] ct = 0 for i in a: if str(i) == 'Hello': ct += 1 print(ct) while True: break

ЦитатаСообщение от axeod Посмотреть сообщение

использовать for и while - оба цикла
Добавлено через 11 минут

ЦитатаСообщение от alilxxey Посмотреть сообщение

while True:
break
3850 / 2138 / 566
Регистрация: 02.09.2015
Сообщений: 5,425

ЦитатаСообщение от axeod Посмотреть сообщение

использовать for и while - оба цикла
alilxxey,

for i in range(1): print(4)
1 2 3
while True: print(4) break

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Посчитайте, сколько раз встречается в тексте каждое слово
Дан текст на русском языке. Посчитайте, сколько раз встречается в тексте каждое слово. Слово —.

Посчитайте, сколько раз встречается в тексте каждое слово
Дан текст на русском языке. Посчитайте, сколько раз встречается в тексте каждое слово. Слово —.

Определить, сколько раз в текстовом файле встречается каждое слово
Ребят, помогите, пожалуйста. Необходимо считать текст с текстового файла и определить, сколько.

Написать программу, подсчитывающую, сколько раз в предложении встречается указанное слово
Написать программу, подсчитывающую, сколько раз в предложении встречается указанное слово.

Написать программу, подсчитывающую, сколько раз в предложении встречается указанное слово
3) Написать программу, подсчитывающую, сколько раз в предложении встречается указанное слово. Не.

Вывести на экран построчно каждое слово и сколько раз оно встречается в тексте.
Дан текст, состоящий из количества строк текста и самого текста. Вывести на экран построчно каждое.

Сколько раз в тексте встречается заданное слово
Определить, сколько раз в тексте встречается заданное слово.

Как работать с датами в pandas

Библиотека Pandas — это весьма эффективный инструмент для обработки данных, представляющих собой временные ряды. На самом деле, эта библиотека была создана Уэсом МакКинни для работы с финансовыми данными, которые состоят, главным образом, из временных рядов.

При работе с временными рядами много сил уходит на выполнение различных операций с датой и временем. Этот материал посвящён ответам на четыре распространённых вопроса из данной сферы.

Возможно, вы уже сталкивались с этими вопросами. Ответить на все из них, кроме последнего, можно сравнительно просто. А вот ответ на последний, довольно-таки хитрый вопрос, представляет собой последовательность из нескольких действий.

Начнём с создания учебного датафрейма (объекта DataFrame ), с которым будем экспериментировать:

df = pd.DataFrame(< "booking_id": [1001, 1002, 1003, 1004, 1005], "property" : ["A", "A", "B", "B", "C"], "created_at": ["2022-03-01", "2022-02-10", "2022-04-12", "2022-04-11", "2022-06-05"], "checkin_date": ["2022-06-01", "2022-06-10", "2022-06-02", "2022-06-20", "2022-08-10"], "checkout_date": ["2022-06-06", "2022-06-15", "2022-06-06","2022-06-28", "2022-08-16"], "amount": [5400, 5600, 4800, 9000, 6500] >) # изменение типа данных date_cols = ["created_at","checkin_date","checkout_date"] df[date_cols] = df[date_cols].astype("datetime64[ns]") # вывод объекта DataFrame df

Датафрейм, с которым мы будем работать

Для того чтобы у нас была бы возможность пользоваться функциями pandas, предназначенными для работы с датой и временем, даты в датафрейме должны быть представлены значениями подходящего типа данных. Именно по этой причине мы поменяли тип данных соответствующих столбцов на datetime64[ns] .

1. Как извлечь из даты информацию о месяце и годе?

Дата содержит различные фрагменты информации, такие как год, день недели, месяц и так далее. Все эти фрагменты можно извлечь из даты с использованием методов, к которым обращаются через аксессор dt .

Например, месяц можно получить с помощью метода month . А как получить сведения о годе и месяце в формате ГГГГ-ММ ? Ответ на этот вопрос уже не так очевиден. Извлечь эти сведения из даты можно, прибегнув к методу to_period :

# создание столбца year_month df["year_month"] = df["created_at"].dt.to_period("M") # вывод объекта DataFrame df

Столбец year_month в датафрейме

2. Как прибавить к дате временной интервал?

Прибавление к датам временных интервалов или вычитание их из дат — это одна из операций, часто встречающихся при работе с датами. Выполнить её можно, воспользовавшись функцией DateOffset .

Добавим 1 день к дате выселения (например — из некоего объекта недвижимости) ( checkout_date ) для записи о бронировании с идентификатором 1001 :

df.loc[df["booking_id"]==1001, "checkout_date"] = \ df.loc[df["booking_id"]==1001, "checkout_date"] + \ pd.DateOffset(days=1) # проверка результата print(df.loc[df["booking_id"]==1001, "checkout_date"]) # вывод 0 2022-06-07 Name: checkout_date, dtype: datetime64[ns]

3. Как найти интервал в днях между двумя датами?

Интервал между двумя датами можно найти, вычтя одну из другой. Результатом этой операции будет объект Timedelta , а это не совсем то, что нам нужно:

df["checkout_date"][0] - df["checkin_date"][0] # вывод Timedelta('6 days 00:00:00')

Получить разницу между датами в днях, в виде целого числа, можно, воспользовавшись атрибутом days . Создадим столбец, который выводит разницу в днях между датой вселения ( checkin_date ) и датой создания бронирования ( created_at ):

# разница, выраженная в днях df["days_to_checkin"] = \ (df["checkin_date"] - df["created_at"]).dt.days # вывод объекта DataFrame df

Столбец days_to_checkin в датафрейме

4. Как сформировать последовательность дат между начальной и конечной датами?

Предположим, нам нужен календарь, который показывает дни, в которые объект недвижимости забронирован. Сейчас в первой строке датафрейма есть запись о том, что объект недвижимости A забронирован с 2022–06–01 по 2022–06–07 . Получается, что объект A забронирован на даты 2022–06–01 , 2022–06–02 , 2022–06–03 , 2022–06–04 , 2022–06–05 , 2022–06–06 (если предположить, что постоялец выселяется в 10 утра 2022–06–07 ).

Такой календарь можно создать, найдя даты между датами вселения и выселения и внеся их в объект DataFrame .

Для начала создадим датафрейм calendar , содержащий столбцы property , checkin_date и checkout_date :

# создание объекта DataFrame calendar calendar = df[["property","checkin_date","checkout_date"]]

Функция date_range даёт нам даты, находящиеся между начальной и конечной датами. Вот что получится для первой записи о бронировании:

pd.date_range(calendar["checkin_date"][0], calendar["checkout_date"][0]) # вывод DatetimeIndex(['2022-06-01', '2022-06-02', '2022-06-03', '2022-06-04', '2022-06-05', '2022-06-06', '2022-06-07'], dtype='datetime64[ns]', freq='D')

Тут есть одна проблема: нам не нужно, чтобы дата выселения ( checkout_date ) была бы показана как дата, когда объект недвижимости забронирован. Поэтому мы, прежде чем находить диапазон дат, вычтем 1 из даты выселения.

Для того чтобы сделать это для всех строк, нужно воспользоваться функцией apply . Мы, кроме того, конвертируем вывод функции date_range в список, воспользовавшись конструктором list :

# создание столбца booked_days calendar.loc[:, "booked_days"] = calendar.apply( lambda x: list( pd.date_range( x.checkin_date, x.checkout_date - pd.DateOffset(days=1) ).date ), axis = 1 ) # вывод объекта DataFrame calendar

Столбец booked_days в датафрейме

Далее — нам нужно заполнить датафрейм, развернув даты из столбца booked_days . В этом нам поможет функция explode :

# функция explode calendar = calendar.explode( column="booked_days", ignore_index=True )[["property","booked_days"]] # вывод первых 5 строк calendar.head()

Первые 5 строк календаря

Теперь у нас имеется календарь дней, в которые объект недвижимости забронирован.

Итоги

Мы нашли ответы на 4 вопроса, решили 4 задачи, с которыми вы, скорее всего, столкнётесь, работая с временными рядами, содержащими даты. Надеемся, вам пригодится то, о чём вы сегодня узнали.

О, а приходите к нам работать? �� ��

Мы в wunderfund.io занимаемся высокочастотной алготорговлей с 2014 года. Высокочастотная торговля — это непрерывное соревнование лучших программистов и математиков всего мира. Присоединившись к нам, вы станете частью этой увлекательной схватки.

Мы предлагаем интересные и сложные задачи по анализу данных и low latency разработке для увлеченных исследователей и программистов. Гибкий график и никакой бюрократии, решения быстро принимаются и воплощаются в жизнь.

Сейчас мы ищем плюсовиков, питонистов, дата-инженеров и мл-рисерчеров.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *