Boxplot для списка в фрейме данных pandas

#python #pandas

#python #pandas

Вопрос:

У меня есть фолл. фрейм данных:

     Month(s)                                             Vals
0        Mar                             [3.691756, 3.59027575]
1  Mar - Apr  [4.75706325, 3.138456625, 1.90741175, 3.019323]
2  Mar - May  [4.698454875, 3.317812375, 2.512695375, 2.8096]
3  Mar - Jun  [4.70111125, 3.474370375, 2.53445075, 2.926820]
4  Mar - Jul  [4.79324375, 3.56983175, 2.39309125, 3.0682476]
5  Mar - Aug  [4.618898125, 3.613308875, 2.361248375, 3.0536]
 

Я хочу создать boxplot с осью x, используя столбец «Месяц (ы)», а ось y — столбец «Vals». Простое выполнение df.plot() не работает. Как мне это исправить?

Комментарии:

1. Вы ведь понимаете , что ваша Vals колонка — это а list , верно? Вам нужно будет либо разбить его на разные столбцы, а затем построить график, либо вам нужно будет свернуть список в некоторые статистические показатели (такие как среднее значение и дисперсия), которые вы можете построить. В вашем вопросе недостаточно информации, чтобы я мог понять, какой подход соответствует вашим потребностям. Кроме того, ваш Month(s) столбец должен иметь единое значение, чтобы график имел смысл. Кроме того, замените Month(s) его на что-нибудь другое, потому что это имя напрашивается на неприятности.

2. спасибо @Kartik, я хочу нарисовать прямоугольную диаграмму, поэтому не уверен, поможет ли вычисление статистической меры.

3. Хорошо, тогда объясню вам данные Vals … Прямоугольные графики используются для визуализации распределения данных, они похожи на нормальное распределение, как видно сверху. У них есть линия для среднего значения и границы прямоугольника, представляющие стандартное отклонение, а затем хвосты, представляющие доверительные интервалы, и точки за ними, показывающие выбросы. Ваш Vals не соответствует ни одной из этих мер прямо сейчас.

Ответ №1:

Подготовка вашего фрейма данных путем установки «Месяца (ов)» в качестве индекса

 df = pd.DataFrame([('      Mar',[3.691756, 3.59027575]),
               ('Mar - Apr', [4.75706325, 3.138456625, 1.90741175, 3.019323]),
               ('Mar - May',[4.698454875, 3.317812375, 2.512695375, 2.8096]),
               ('Mar - Jun', [4.70111125, 3.474370375, 2.53445075, 2.926820]),
               ('Mar - Jul', [4.79324375, 3.56983175, 2.39309125, 3.0682476]),
               ('Mar - Aug', [4.618898125, 3.613308875, 2.361248375, 3.0536])],
              columns=['Month(s)','Vals']).set_index('Month(s)')
 

это позволит вам преобразовать каждую строку в серию

 df['Vals'].apply(lambda x: pd.Series(x)).T.boxplot(figsize=(10,10),rot=45)
 

Вывод графика