更高效地对pandas数据框中一组列进行均值中心化并保留列名

我有一个包含大约370列的数据框。我正在测试一系列假设,这些假设需要我使用模型的子集来拟合一个三次回归模型。我计划使用statsmodels来建模这些数据。

多项式回归过程的一部分涉及到变量的均值中心化(从每个特定特征的案例中减去均值)。

我可以用三行代码完成这个操作,但考虑到我需要为六个假设重复这个过程,这似乎效率不高。请注意,我需要从statsmodel输出中获取系数级别的数据,因此我需要保留列名。

这是数据的一个片段。这是为其中一个假设测试所需的列子集。

      i  we  you  shehe  they  ipron0  0.51   0    0   0.26  0.00   1.021  1.24   0    0   0.00  0.00   1.662  0.00   0    0   0.00  0.72   1.453  0.00   0    0   0.00  0.00   0.53

这是进行均值中心化并保留列名的代码。

from sklearn import preprocessing#create df of features for hypothesis, from full dataframeh2 = df[['i', 'we', 'you', 'shehe', 'they', 'ipron']]#center the variablesx_centered = preprocessing.scale(h2, with_mean='True', with_std='False')#convert back into a Pandas dataframe and add column namesx_centered_df = pd.DataFrame(x_centered, columns=h2.columns)

关于如何使这个过程更高效/更快的任何建议都将非常棒!


回答:

df.apply(lambda x: x-x.mean())%timeit df.apply(lambda x: x-x.mean())1000 loops, best of 3: 2.09 ms per loopdf.subtract(df.mean())%timeit df.subtract(df.mean())1000 loops, best of 3: 902 µs per loop

两者都产生以下结果:

        i  we  you  shehe  they  ipron0  0.0725   0    0  0.195 -0.18 -0.1451  0.8025   0    0 -0.065 -0.18  0.4952 -0.4375   0    0 -0.065  0.54  0.2853 -0.4375   0    0 -0.065 -0.18 -0.635

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注