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

Значения гистограммы серии Pandas

У меня есть несколько значений в серии Python Pandas (тип: pandas.core.series.Series)

In [1]: series = pd.Series([0.0,950.0,-70.0,812.0,0.0,-90.0,0.0,0.0,-90.0,0.0,-64.0,208.0,0.0,-90.0,0.0,-80.0,0.0,0.0,-80.0,-48.0,840.0,-100.0,190.0,130.0,-100.0,-100.0,0.0,-50.0,0.0,-100.0,-100.0,0.0,-90.0,0.0,-90.0,-90.0,63.0,-90.0,0.0,0.0,-90.0,-80.0,0.0,])

In [2]: series.min()
Out[2]: -100.0

In [3]: series.max()
Out[3]: 950.0

Я хотел бы получить значения гистограммы (не обязательно строить гистограмму)... Мне просто нужно получить частоту для каждого интервала.

Скажем, что мои интервалы идут от [-200; -150] - [950; 1000]

поэтому нижние границы

lwb = range(-200,1000,50)

и верхние границы

upb = range(-150,1050,50)

Я не знаю, как получить частоту (количество значений, которые находятся внутри каждого интервала) сейчас... Я уверен, что определение lwb и upb не нужно... но я не знаю, что функцию, которую я должен использовать, чтобы выполнить это! (после погружения в doc Pandas, я думаю, что функция cut может мне помочь, потому что это проблема дискретизации... но я не понимаю, как ее использовать)

После того, как я смогу сделать это, я посмотрю способ отображения гистограммы (но это другая проблема)

4b9b3361

Ответ 1

Вам просто нужно использовать функцию гистограммы numpy:

import numpy as np
count, division = np.histogram(series)

где деление - автоматически вычисленная граница для ваших бункеров, а count - это совокупность внутри каждого бункера.

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

count, division = np.histogram(series, bins = [-201,-149,949,1001])

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

series.hist(bins=division)

Ответ 2

Чтобы получить частотные значения значений в заданном интервале бинарных интервалов, мы могли бы использовать pd.cut, который возвращает индексы наполовину открытые ящики для каждого элемента вместе с value_counts для вычисления их соответствующих счетчиков.

Чтобы построить график, можно сделать график штрихов.

step = 50
bin_range = np.arange(-200, 1000+step, step)
out, bins  = pd.cut(s, bins=bin_range, include_lowest=True, right=False, retbins=True)
out.value_counts(sort=False).plot.bar()

введите описание изображения здесь

Частота для каждого интервала, отсортированного в порядке убывания их количества:

out.value_counts().head()
[-100, -50)    18
[0, 50)        16
[800, 850)      2
[-50, 0)        2
[950, 1000)     1
dtype: int64

Чтобы изменить график, чтобы включить только нижний закрытый интервал диапазона для эстетической цели, вы можете сделать:

out.cat.categories = bins[:-1]
out.value_counts(sort=False).plot.bar()

введите описание изображения здесь

Ответ 3

Если вы говорите, что хотите получить значения гистограммы, вы просто ищете частоту каждого уникального значения в своей серии, если я не ошибаюсь. В этом случае вы можете просто сделать serie.value_counts(), который даст вам:

 0.0      16
-90.0      8
-100.0     5
-80.0      3
 63.0      1
-50.0      1
 130.0     1
 190.0     1
 840.0     1
-48.0      1
 208.0     1
-64.0      1
 812.0     1
-70.0      1
 950.0     1