在python中,从矩阵或数据帧中减去分组平均值(面板数据的“within”转换)

2024-03-29 00:10:34 发布

您现在位置:Python中文网/ 问答频道 /正文

在多次观察单位的数据集中,许多统计方法(特别是计量经济学)将变换应用于数据,其中减去每个变量的分组平均值,从而从单位水平平均值创建单位水平(非标准化)异常数据集。你知道吗

我想用Python做这个。你知道吗

在R中,它由lfe包中的demeanlist函数非常干净地处理。下面是一个示例数据集,其中包含一个分组变量fac

> df <- data.frame(fac = factor(c(rep("a", 5), rep("b", 6), rep("c", 4))),
+                  x1 = rnorm(15),
+                  x2 = rbinom(15, 10, .5))
> df
   fac          x1 x2
1    a -0.77738784  6
2    a  0.25487383  4
3    a  0.05457782  4
4    a  0.21403962  7
5    a  0.08518492  4
6    b -0.88929876  4
7    b -0.45661751  5
8    b  1.05712683  3
9    b -0.24521251  5
10   b -0.32859966  7
11   b -0.44601716  3
12   c -0.33795597  4
13   c -1.09185690  7
14   c -0.02502279  6
15   c -1.36800818  5

以及转变:

> library(lfe)
> demeanlist(df[,c("x1", "x2")], list(df$fac))
            x1   x2
1  -0.74364551  1.0
2   0.28861615 -1.0
3   0.08832015 -1.0
4   0.24778195  2.0
5   0.11892725 -1.0
6  -0.67119563 -0.5
7  -0.23851438  0.5
8   1.27522996 -1.5
9  -0.02710938  0.5
10 -0.11049653  2.5
11 -0.22791403 -1.5
12  0.36775499 -1.5
13 -0.38614594  1.5
14  0.68068817  0.5
15 -0.66229722 -0.5

换句话说,从组abc中减去以下数字:

> library(doBy)
> summaryBy(x1+x2~fac, data = df)
  fac     x1.mean x2.mean
1   a -0.03374233     5.0
2   b -0.21810313     4.5
3   c -0.70571096     5.5

我肯定我能想出一个函数来实现这一点,但我会在非常大的数据集上调用它数千次,并且想知道是否已经构建了一些快速优化的东西,或者很明显可以构建。你知道吗


Tags: 数据函数dfdatalibrary水平单位mean