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
应用于通过箱子限制的测试数据,然后将其传递给模型模型。