如何使用pandas添加重复列

时间:2015-07-17 22:49:59

标签: python pandas

我正在做作业,遇到问题,我有一个大矩阵,第一列Y002是一个名义变量,它有3个级别,分别编码为1,2,3。另外两列V96和V97只是数字。

现在,我想获得一组平均值对应于变量Y002。我写了这样的代码

group = data2.groupby(by=["Y002"]).mean()

然后我索引以使用

获得每个组的意思

group1 = group["V96"]

group2 = group["V97"]

现在我想将这个组的意思作为新列添加到原始数据帧中,其中每个均值匹配相应的Y002代码(1或2或3)。实际上我尝试了这段代码,但它只显示了NAN。

data2["group1"] = pd.Series(group1, index=data2.index)

希望有人可以帮助我,非常感谢:)

PS:希望这是有道理的。就像R语言一样,我们可以使用

做同样的事情

data2$group1 = with(data2, tapply(V97,Y002,mean))[data2$Y002]

但是我们如何在Python和pandas中实现呢???

1 个答案:

答案 0 :(得分:0)

您可以使用.transform()

import pandas as pd
import numpy as np

# your data
# ============================
np.random.seed(0)
df = pd.DataFrame({'Y002': np.random.randint(1,4,100), 'V96': np.random.randn(100), 'V97': np.random.randn(100)})
print(df)


       V96     V97  Y002
0  -0.6866 -0.1478     1
1   0.0149  1.6838     2
2  -0.3757  0.9718     1
3  -0.0382  1.6077     2
4   0.3680 -0.2571     2
5  -0.0447  1.8098     3
6  -0.3024  0.8923     1
7  -2.2244 -0.0966     3
8   0.7240 -0.3772     1
9   0.3590 -0.5053     1
..     ...     ...   ...
90 -0.6906  1.5567     2
91 -0.6815 -0.4189     3
92 -1.5122 -0.4097     1
93  2.1969  1.1164     2
94  1.0412 -0.2510     3
95 -0.0332 -0.4152     1
96  0.0656 -0.6391     3
97  0.2658  2.4978     1
98  1.1518 -3.0051     2
99  0.1380 -0.8740     3

# processing
# ===========================
df['V96_mean'] = df.groupby('Y002')['V96'].transform(np.mean)
df['V97_mean'] = df.groupby('Y002')['V97'].transform(np.mean)
df

       V96     V97  Y002  V96_mean  V97_mean
0  -0.6866 -0.1478     1   -0.1944    0.0837
1   0.0149  1.6838     2    0.0497   -0.0496
2  -0.3757  0.9718     1   -0.1944    0.0837
3  -0.0382  1.6077     2    0.0497   -0.0496
4   0.3680 -0.2571     2    0.0497   -0.0496
5  -0.0447  1.8098     3    0.0053   -0.0707
6  -0.3024  0.8923     1   -0.1944    0.0837
7  -2.2244 -0.0966     3    0.0053   -0.0707
8   0.7240 -0.3772     1   -0.1944    0.0837
9   0.3590 -0.5053     1   -0.1944    0.0837
..     ...     ...   ...       ...       ...
90 -0.6906  1.5567     2    0.0497   -0.0496
91 -0.6815 -0.4189     3    0.0053   -0.0707
92 -1.5122 -0.4097     1   -0.1944    0.0837
93  2.1969  1.1164     2    0.0497   -0.0496
94  1.0412 -0.2510     3    0.0053   -0.0707
95 -0.0332 -0.4152     1   -0.1944    0.0837
96  0.0656 -0.6391     3    0.0053   -0.0707
97  0.2658  2.4978     1   -0.1944    0.0837
98  1.1518 -3.0051     2    0.0497   -0.0496
99  0.1380 -0.8740     3    0.0053   -0.0707

[100 rows x 5 columns]