Python 如何有效地利用熊猫的分类和间隔 背景
我已经创建了一个模型。更准确地说,标准的机器学习模型在我的数据集上表现得非常糟糕,所以我选择了“老派”,简单地将我的数值组合起来,然后计算每个变量的平均值。现在我想使用这个组合数据集“预测” 我的“模型”数据集如下所示:Python 如何有效地利用熊猫的分类和间隔 背景,python,pandas,apply,intervals,Python,Pandas,Apply,Intervals,我已经创建了一个模型。更准确地说,标准的机器学习模型在我的数据集上表现得非常糟糕,所以我选择了“老派”,简单地将我的数值组合起来,然后计算每个变量的平均值。现在我想使用这个组合数据集“预测” 我的“模型”数据集如下所示: binnedYearOfBuild binnedGross binnedNet平均值 0 (1950.999, 1995.0] (24.999, 916.0] (5.999, 332.0] 11700.00 1 (1950.999, 1995.0] (24
binnedYearOfBuild binnedGross binnedNet平均值
0 (1950.999, 1995.0] (24.999, 916.0] (5.999, 332.0] 11700.00
1 (1950.999, 1995.0] (24.999, 916.0] (5.999, 332.0] 68520.00
2 (1950.999, 1995.0] (24.999, 916.0] (5.999, 332.0] 70890.00
3 (1950.999, 1995.0] (24.999, 916.0] (5.999, 332.0] 44306.25
4 (1950.999, 1995.0] (24.999, 916.0] (5.999, 332.0] 26640
预测数据
但除平均值外,这些都是区间。我的数据将具有实际值,如下所示:
建筑总净值年份
100 2010.0 19128.0 9736.0
200 2008.0 16162.0 6128.0
300 2009.0 792.0 0.0
400 2009.0 792.0 0.0
500 2009.0 8273.0 4002
问题:检查这些间隔非常慢
我无法找到一种有效的方法来询问每行新数据属于模型的哪一行。我做了如下操作:
def check\u binned\u cols(行,值):
#3因为有3个装箱的可乐
对于范围(3)内的idx:
如果val[idx]不在第[idx]行中:
返回错误
返回真值
然后:
any(model_df.iloc[:,:3]。应用(检查组合列,axis='columns',args=(预测行,))
其中,predict\u row
是我要检查的预测数据集中的一行
这是难以置信的慢,这并不让我感到惊讶;我在一个函数中抛出了一个for循环,该函数被pd.apply
调用。但是我似乎找不到一些可以满足我要求的预先制作的函数。这似乎很难相信,因为我只是试图检查一个值是否在一个间隔内
如何做得更好(更快)?您是如何创建箱子的?您是否使用了
pd.cut/qcut
?您可能可以将pd.cut
应用于通过箱子限制的测试数据,然后将其传递给模型。您是如何创建箱子的?您是否使用了pd.cut/qcut
?您可能可以将pd.cut
应用于通过箱子限制的测试数据,然后将其传递给模型模型。