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



我正在遵循这个例子,我想使用熊猫重播。不幸的是,我几乎立即陷入困境:我不知道如何为所有行添加一列,其中包含每个类别的平均值。

我的数据框:

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'])

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

ages['ma'] = ages.groupby('gardening')['age'].mean()

但这给出了:

19.5
57.2
6 x NaN

我想要(第一列(

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
^^

我尝试了广播,转换,但这并没有给出我想要的结果。我该如何解决这个问题?

groupbytransform一起使用:

ages['avg_garden_age'] = ages.groupby('gardening')['age'].transform('mean')
ages

输出:

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

使用np.bincountgardening列已经01的事实

def grp_mean(bins, weights):
counts = np.bincount(bins)
sums = np.bincount(bins, weights)
return (sums / counts)[bins]
ages.assign(avg_garden_age=grp_mean(ages.gardening.values.astype(int), ages.age))
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

最新更新