У меня есть фрейм данных, df
и я использую несколько столбцов из него, чтобы groupby
:
df['col1','col2','col3','col4'].groupby(['col1','col2']).mean()
Таким образом, я почти получаю таблицу (фрейм данных), которая мне нужна. Чего не хватает, так это дополнительного столбца, который содержит количество строк в каждой группе. Другими словами, я имею в виду, но я также хотел бы знать, сколько было использовано для получения этих средств. Например, в первой группе 8 значений, а во второй 10 и так далее.
Вкратце: как получить групповую статистику для фрейма данных?
df[['col1','col2','col3','col4']].groupby(['col1','col2']).agg(['mean', 'count'])
count
столбец на группу.result = df['col1','col2','col3','col4'].groupby(['col1', 'col2']).mean() ; counts = times.groupby(['col1', 'col2']).size() ; result['count'] = counts
Быстрый ответ:
Самый простой способ получить количество строк на группу - это вызов
.size()
, который возвращаетSeries
:Обычно вы хотите этот результат как
DataFrame
(а неSeries
), чтобы вы могли сделать:Если вы хотите узнать, как рассчитать количество строк и другую статистику для каждой группы, продолжайте читать ниже.
Подробный пример:
Рассмотрим следующий пример кадра данных:
Сначала давайте использовать,
.size()
чтобы получить количество строк:Тогда давайте использовать,
.size().reset_index(name='counts')
чтобы получить количество строк:Включая результаты для большей статистики
Когда вы хотите рассчитать статистику по сгруппированным данным, обычно это выглядит так:
Вышеуказанный результат немного раздражает из-за вложенных меток столбцов, а также из-за того, что количество строк указывается для каждого столбца.
Чтобы получить больше контроля над выводом, я обычно делю статистику на отдельные агрегаты, которые затем объединяю, используя
join
. Это выглядит так:Сноски
Код, использованный для генерации тестовых данных, показан ниже:
Отказ от ответственности:
Если некоторые из столбцов, которые вы агрегируете, имеют нулевые значения, то вы действительно хотите посмотреть на количество строк в группе как независимое агрегирование для каждого столбца. В противном случае вас могут ввести в заблуждение относительно того, сколько записей фактически используется для вычисления таких вещей, как среднее значение, поскольку панды отбрасывают
NaN
записи в вычислении среднего значения, не сообщая вам об этом.источник
In [5]: counts_df = pd.DataFrame(df.groupby('col1').size().rename('counts'))
, может быть, лучше установить size () в качестве нового столбца, если вы хотите манипулировать кадром данных для дальнейшего анализа, который должен бытьcounts_df = pd.DataFrame(df.groupby('col1').size().reset_index(name='counts')
isnull
этот запрос в один столбец?'col4': ['median', 'min', 'count', 'isnull']
Одна функция, чтобы управлять ими всеми:
GroupBy.describe
Возвращает
count
,mean
,std
, и другие полезные статистические данные за группой.Чтобы получить конкретную статистику, просто выберите их,
describe
работает для нескольких столбцов (изменить['C']
на['C', 'D']
- или удалите его вообще - и посмотрите, что произойдет, в результате получается мультиининдексированный столбец данных).Вы также получаете различную статистику для строковых данных. Вот пример,
Для получения дополнительной информации см. Документацию .
источник
Мы можем легко сделать это с помощью группового и счетного. Но мы должны помнить использовать reset_index ().
источник
Чтобы получить несколько показателей, сверните индекс и сохраните имена столбцов:
Производит:
источник
Создайте объект группы и вызовите методы, как показано ниже:
источник
Пожалуйста, попробуйте этот код
Я думаю, что код добавит столбец с названием «считать это», который считает каждую группу
источник