Подтвердить что ты не робот

Построение гистограмм сгруппированных данных в pandas DataFrame

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

from pandas import DataFrame
import numpy as np
x = ['A']*300 + ['B']*400 + ['C']*300
y = np.random.randn(1000)
df = DataFrame({'Letter':x, 'N':y})
grouped = df.groupby('Letter')

В моем невежестве я пробовал эту команду кода:

df.groupby('Letter').hist()

который вышел из строя с сообщением об ошибке "TypeError: не может конкатенировать объекты" str "и" float "

Любая помощь в наибольшей степени оценена.

4b9b3361

Ответ 1

Я нахожусь в рулоне, просто нашел еще более простой способ сделать это, используя ключевое слово в методе hist:

df['N'].hist(by=df['Letter'])

Это очень удобный небольшой ярлык для быстрого сканирования ваших сгруппированных данных!

Для будущих посетителей продукт этого звонка является следующей диаграммой: enter image description here

Ответ 2

Ваша функция терпит неудачу, потому что в конечном итоге у вас есть иерархический индекс и два столбца (Letter и N), поэтому, когда вы выполняете .hist(), он пытается сделать гистограмму обоих столбцов, следовательно, str-ошибку.

Это поведение по умолчанию для функций построения pandas (один график за столбец), поэтому, если вы измените свой фрейм данных, чтобы каждая буква была столбцом, вы получите именно то, что хотите.

df.reset_index().pivot('index','Letter','N').hist()

reset_index() - это просто переместить текущий индекс в столбец с именем index. Затем pivot возьмет ваш фрейм данных, соберите все значения N для каждого Letter и сделайте их столбцом. Результирующий кадр данных в виде 400 строк (заполняет отсутствующие значения с помощью NaN) и трех столбцов (A, B, C). hist() затем произведет одну гистограмму на столбец, и вы получите формат графиков по мере необходимости.

Ответ 3

Одним из решений является использование гистограммы matplotlib непосредственно в каждом сгруппированном фрейме данных. Вы можете прокручивать группы, полученные в цикле. Каждая группа является фреймворком данных. И вы можете создать гистограмму для каждого из них.

from pandas import DataFrame
import numpy as np
x = ['A']*300 + ['B']*400 + ['C']*300
y = np.random.randn(1000)
df = DataFrame({'Letter':x, 'N':y})
grouped = df.groupby('Letter')

for group in grouped:
  figure()
  matplotlib.pyplot.hist(group[1].N)
  show()

Ответ 4

В последней версии Pandas вы можете сделать df.N.hist(by=df.Letter)

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