寻找平均匹配标准的最大数据子集

问题描述 投票:1回答:2

我试图找到特定数据集的最大子集和,其中数据集中字段的平均值与预定标准匹配。

例如,假设我有一个人的体重(例如下面的例子),我的目标是找到最大的总重量,其中所得组的平均体重在200到201磅之间。

  1. 210
  2. 201
  3. 190
  4. 220
  5. 188

使用上述,平均重量在200和201磅之间的最大重量总和来自人1,2和3.它们的重量之和为601,它们之间的平均重量为200.3。

除了蛮力之外,有没有办法对上面的东西进行编程,最好是使用python?我甚至不确定从哪里开始研究这个,所以任何帮助或指导都表示赞赏。

python optimization weighted-average
2个回答
1
投票

首先将所需范围转换为0,只是为了方便起见。我将转换到下限,虽然中点也是一个不错的选择。

这使您的数据集[10, 1, -10, 20, -12]。设定金额为9;你需要它在0upper_bound * len(data)的范围内。

这为您提供了“目标总和”问题的易处理变体:找到满足和约束的列表子集。在这种情况下,您有两个解决方案:[10, 1, -10][10, 1, -12]。您可以通过增强习惯目标和问题来包含变化的总和来找到这一点:“剩余金额”将包括平均计算的变化。

你能从那里完成吗?


0
投票

有很多方法可以做到这一点,但熊猫是你的朋友。

import pandas as pd

df = pd.DataFrame({'weight':[209, 203, 190, 220, 188, 193]})
df = df.rolling(3).mean()
df.query('200 <= weight <= 201').max()

在这种情况下,我们从权重中创建一个数据框。然后我们采用每3个权重的滚动平均值。由此我们得到最大平均值在200到201磅之间。

输出:

weight    200.666667
dtype: float64
© www.soinside.com 2019 - 2024. All rights reserved.