如何在Pandas中的所有适用行中复制groupby的平均值

dr *_*rry 3 python group-by aggregate-functions pandas

我正在关注这个例子,我想用熊猫重播.不幸的是,我几乎立即陷入困境:我不知道如何为所有行添加一个具有每个类别的平均值的列.

我的数据帧:

ages = pd.DataFrame(
[[13, 0.0, 1.0, 1.0], 
[14, 0.0, 1.0, 0.0], 
[15, 0.0, 1.0, 0.0], 
[25, 1.0, 1.0, 1.0], 
[35, 0.0, 1.0, 1.0], 
[49, 1.0, 0.0, 0.0], 
[68, 1.0, 1.0, 1.0], 
[71, 1.0, 0.0, 0.0], 
[73, 1.0, 0.0, 1.0]], columns=['age', 'gardening', 'gameing', 'hats'])
Run Code Online (Sandbox Code Playgroud)

我想为所有(不)做园艺的人添加一个平均年龄的栏目:

ages['ma'] = ages.groupby('gardening')['age'].mean()
Run Code Online (Sandbox Code Playgroud)

但这给了:

19.5
57.2
6 x NaN
Run Code Online (Sandbox Code Playgroud)

我想要(第一栏)

            gardening      age
19.5         0             13
19.5         0             14
19.5         0             15
57.2         1             25
19.5         0             35
57.2         1             49
57.2         1             68
57.2         1             71
57.2         1             73
 ^^
Run Code Online (Sandbox Code Playgroud)

我试过广播,转换,但这不是我想要的结果.我怎么解决这个问题?

Sco*_*ton 5

使用groupbytransform:

ages['avg_garden_age'] = ages.groupby('gardening')['age'].transform('mean')
ages
Run Code Online (Sandbox Code Playgroud)

输出:

   age  gardening  gameing  hats  avg_garden_age
0   13        0.0      1.0   1.0           19.25
1   14        0.0      1.0   0.0           19.25
2   15        0.0      1.0   0.0           19.25
3   25        1.0      1.0   1.0           57.20
4   35        0.0      1.0   1.0           19.25
5   49        1.0      0.0   0.0           57.20
6   68        1.0      1.0   1.0           57.20
7   71        1.0      0.0   0.0           57.20
8   73        1.0      0.0   1.0           57.20
Run Code Online (Sandbox Code Playgroud)