如何根据一组 k 最近邻计算平均值?

Posted

技术标签:

【中文标题】如何根据一组 k 最近邻计算平均值?【英文标题】:How to compute the mean based on a grouping of k nearest neighbours? 【发布时间】:2019-04-02 15:41:49 【问题描述】:

我有一个看起来像这样的数据框:

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 小时的产量平均值,第 17 和 18 小时的产量平均值第 21 和 22 小时,最后是第 25 小时

除了创建小时集群然后按集群分组之外,还有更好的方法吗?

【问题讨论】:

【参考方案1】:

由于您的组间隔不均匀,请定义您的 bin 边缘并使用 pd.cut 对这些 bin 进行分组。

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

【讨论】:

以上是关于如何根据一组 k 最近邻计算平均值?的主要内容,如果未能解决你的问题,请参考以下文章

k-最近邻,其中每个类中的对象数差异很大

如何在 Matlab 中进行高效的 k 最近邻计算

后端程序员之路 12K最近邻(k-Nearest Neighbour,KNN)分类算法

K-近邻算法

K近邻法

K-近邻算法(KNN)