Значения гистограммы серии 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
может мне помочь, потому что это проблема дискретизации... но я не понимаю, как ее использовать)
После того, как я смогу сделать это, я посмотрю способ отображения гистограммы (но это другая проблема)
Ответы
Ответ 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