Python pandas:按两个列进行分组并创建新变量

4
我可以帮助您进行翻译。下面是涉及公司投资者类型所持股份的数据框:
```

我有以下描述公司某种投资者持股比例的数据框:

```
    company  investor   pct 
       1       A         1
       1       A         2
       1       B         4
       2       A         2
       2       A         4
       2       A         6 
       2       C         10
       2       C         8

我希望为每种投资者类型创建一个新的列,计算其在每家公司持有股份的平均值。同时,我需要保持数据集的长度不变,例如使用transform函数。

以下是我希望得到的结果:

     company  investor   pct   pct_mean_A   pct_mean_B   pct_mean_C
       1       A         1        1.5          4            0
       1       A         2        1.5          4            0
       1       B         4        1.5          4            0
       2       A         2        4.0          0            9
       2       A         4        4.0          0            9
       2       A         6        4.0          0            9
       2       C         10       4.0          0            9
       2       C         8        4.0          0            9

非常感谢您的帮助!

非常感谢您的帮助!

1个回答

1
使用 groupby 与聚合函数 mean,并通过 unstack 对助手 DataFrame 进行重塑,然后将其 join 到原始的 df 中:
s = (df.groupby(['company','investor'])['pct']
       .mean()
       .unstack(fill_value=0)
       .add_prefix('pct_mean_'))

df = df.join(s, 'company')
print (df)
   company investor  pct  pct_mean_A  pct_mean_B  pct_mean_C
0        1        A    1         1.5         4.0         0.0
1        1        A    2         1.5         4.0         0.0
2        1        B    4         1.5         4.0         0.0
3        2        A    2         4.0         0.0         9.0
4        2        A    4         4.0         0.0         9.0
5        2        A    6         4.0         0.0         9.0
6        2        C   10         4.0         0.0         9.0
7        2        C    8         4.0         0.0         9.0

或者使用pivot_table,默认聚合函数为mean

s = df.pivot_table(index='company',
                   columns='investor',
                   values='pct', 
                   fill_value=0).add_prefix('pct_mean_')
df = df.join(s, 'company')
print (df)
   company investor  pct  pct_mean_A  pct_mean_B  pct_mean_C
0        1        A    1         1.5           4           0
1        1        A    2         1.5           4           0
2        1        B    4         1.5           4           0
3        2        A    2         4.0           0           9
4        2        A    4         4.0           0           9
5        2        A    6         4.0           0           9
6        2        C   10         4.0           0           9
7        2        C    8         4.0           0           9

1
OP的数据框中pct_mean_A这一列有错误的数值,应该是12。 - Space Impact
@SandeepKadapa - 发生了 ;) - jezrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接