Как получить значения каждой медианы в боксе? - PullRequest
1 голос
/ 07 октября 2019

Набор данных происходит от kaggle .

, этот код

melbourne_file_path = './melb_data.csv'
melbourne_data = pd.read_csv(melbourne_file_path) 
filtered_melbourne_data = melbourne_data.dropna(axis=0)
ax = filtered_melbourne_data.boxplot(column = 'Price', by = 'Regionname');

дает этот блок-график

enter image description here

на блокпосте уже есть много информации, такой как медиана, есть ли способ получить их, соответствующие by s?

Я пробовал этот код, адаптированный из этой записи

ax, bp = filtered_melbourne_data.boxplot(column = 'Price', by = 'Regionname', return_type='both');

и получил эту ошибку

ValueError: not enough values to unpack (expected 2, got 1)

Я также попробовал этот код, адаптированный из этого поста.

ax = filtered_melbourne_data.boxplot(column = 'Price', by = 'Regionname', return_type='both');
print(ax.median)

и получил

<bound method Series.median of Price    (AxesSubplot(0.1,0.15;0.8x0.75), {'whiskers': ...
dtype: object>

как получить значения медиан каждого Regionname?

1 Ответ

2 голосов
/ 07 октября 2019

Возможно, но нужно внести некоторые изменения в решение из поста:

Сначала добавьте ['Price'] для получения значений из одного элемента Series:

ax, bp = filtered_melbourne_data.boxplot(column = 'Price', 
                                         by = 'Regionname', 
                                         return_type='both')['Price']

А затем получите сначалазначение массивов по индексации - [0]:

medians = [median.get_ydata()[0] for median in bp["medians"]]
print (medians)
[990000.0, 670000.0, 715000.0, 590000.0, 780000.0, 1230000.0, 700000.0, 400000.0]
...