查找平均匹配条件的最大数据子集

Finding Largest Subset of Data where Average Matches Criteria

我正在尝试查找特定数据集的最大子集总和,其中数据集中某个字段的平均值符合预定条件。

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

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

使用上面的方法,平均体重在 200 到 201 磅之间的最大体重总和来自人 1、2 和 3。他们的体重总和为 601,他们之间的平均体重为 200.3 .

除了蛮力之外,有没有办法编写程序来执行上述操作,最好使用 python?我什至不确定从哪里开始研究这个,所以任何帮助或指导都将不胜感激。

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

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

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

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

范围内

这为您提供了 "target sum" 问题的一个易于处理的变体:找到满足求和约束的列表子集。在这种情况下,您有两个解决方案:[10, 1, -10][10, 1, -12]。您可以通过增强常规目标和问题以包括变化的总和来找到这一点:"remaining amount" 将包括均值计算的变化。

你能从那里完成吗?