如何使用pandas添加重复列

2024-09-30 16:25:44 发布

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

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

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

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

然后我用索引得到每组的平均值

group1 = group["V96"]

group2 = group["V97"]

现在我想把这组mean作为一个新的列附加到原始数据帧中,其中每个mean都匹配相应的Y002代码(1、2或3)。实际上我试过这个代码,但它只显示NAN。你知道吗

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

希望有人能帮我,非常感谢:)

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

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

但是我们如何在Python和pandas中实现这个呢???你知道吗


Tags: 代码编码indexgroup矩阵mean级别平均值
1条回答
网友
1楼 · 发布于 2024-09-30 16:25:44

您可以使用.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]

相关问题 更多 >