查找平均匹配条件的最大数据子集
Finding Largest Subset of Data where Average Matches Criteria
我正在尝试查找特定数据集的最大子集总和,其中数据集中某个字段的平均值符合预定条件。
例如,假设我有一个人的体重(如下例),我的目标是找到最大的总体重,其中所得组的平均体重在 200 到 201 磅之间。
- 210
- 201
- 190
- 220
- 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;你需要它在 0
到 upper_bound * len(data)
.
范围内
这为您提供了 "target sum" 问题的一个易于处理的变体:找到满足求和约束的列表子集。在这种情况下,您有两个解决方案:[10, 1, -10]
和 [10, 1, -12]
。您可以通过增强常规目标和问题以包括变化的总和来找到这一点:"remaining amount" 将包括均值计算的变化。
你能从那里完成吗?
我正在尝试查找特定数据集的最大子集总和,其中数据集中某个字段的平均值符合预定条件。
例如,假设我有一个人的体重(如下例),我的目标是找到最大的总体重,其中所得组的平均体重在 200 到 201 磅之间。
- 210
- 201
- 190
- 220
- 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;你需要它在 0
到 upper_bound * len(data)
.
这为您提供了 "target sum" 问题的一个易于处理的变体:找到满足求和约束的列表子集。在这种情况下,您有两个解决方案:[10, 1, -10]
和 [10, 1, -12]
。您可以通过增强常规目标和问题以包括变化的总和来找到这一点:"remaining amount" 将包括均值计算的变化。
你能从那里完成吗?