我试图找到特定数据集的最大子集和,其中数据集中字段的平均值与预定标准匹配。
例如,假设我有一个人的体重(例如下面的例子),我的目标是找到最大的总重量,其中所得组的平均体重在200到201磅之间。
使用上述,平均重量在200和201磅之间的最大重量总和来自人1,2和3.它们的重量之和为601,它们之间的平均重量为200.3。
除了蛮力之外,有没有办法对上面的东西进行编程,最好是使用python?我甚至不确定从哪里开始研究这个,所以任何帮助或指导都表示赞赏。
首先将所需范围转换为0,只是为了方便起见。我将转换到下限,虽然中点也是一个不错的选择。
这使您的数据集[10, 1, -10, 20, -12]
。设定金额为9;你需要它在0
到upper_bound * len(data)
的范围内。
这为您提供了“目标总和”问题的易处理变体:找到满足和约束的列表子集。在这种情况下,您有两个解决方案:[10, 1, -10]
和[10, 1, -12]
。您可以通过增强习惯目标和问题来包含变化的总和来找到这一点:“剩余金额”将包括平均计算的变化。
你能从那里完成吗?
有很多方法可以做到这一点,但熊猫是你的朋友。
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