Как вычислить среднее на основе группировки из k ближайших соседей? - PullRequest
0 голосов
/ 29 октября 2018

У меня есть фрейм данных, который выглядит следующим образом:

df = 
Hour    Production 
12         45
15         50
18         89
21         56

12         49
16         55
18         23
21         44

12         33
15         95
17         76
22         89
25         97

Я хочу сгруппировать по часам, а затем взять среднее значение производства, однако я хочу группировать таким образом, чтобы группа могла занимать - / + 1 час. Другими словами, выпуск должен иметь среднее значение производства в 12-й час из трех групп, среднее значение производства в 15 и 16 часов, среднее значение производства в 17 и 18 часов, среднее значение производства в 21-й и 22-й часы и, наконец, только 25-й час

Есть ли лучший способ сделать это, кроме создания кластеров часов и затем группировки по кластерам?

1 Ответ

0 голосов
/ 29 октября 2018

Поскольку ваши группы не расположены равномерно, определите ребра корзины и используйте pd.cut для группировки по этим корзинам.

import pandas as pd

bins = [12, 15, 17, 19, 21, 23, 25, 26]
df.groupby(pd.cut(df.Hour, bins, right=False)).Production.mean()

Выход:

Hour
[12, 15)    42.333333
[15, 17)    66.666667
[17, 19)    62.666667
[19, 21)          NaN
[21, 23)    63.000000
[23, 25)          NaN
[25, 26)    97.000000
Name: Production, dtype: float64
...