首页 > 解决方案 > 如何为组内的每个值制作一列中位数?

问题描述

我有三列:BatchID、UnitID 和分数。

目前,数据集如下所示:

BatchID      UnitID           Score
A123         A123-100         0.111
A123         A123-101         0.121
A123         A123-102         0.101
A123         A123-103         0.102
B456         B456-200         0.211
B456         B456-201         0.221
C789         C789-001         0.199
C789         C789-002         0.189
C789         C789-003         0.192
C789         C789-004         0.201
...          ...              ...

我想添加一个“中位数”列,该列获取每个批次的得分中位数,并将其放在其余数据旁边(在唯一批次中为每个单元重复相同的中值)。像这样的东西:

BatchID      UnitID           Score      Median
A123         A123-100         0.111      0.1065
A123         A123-101         0.121      0.1065
A123         A123-102         0.101      0.1065
A123         A123-103         0.102      0.1065
B456         B456-200         0.211      0.2160
B456         B456-201         0.221      0.2160
C789         C789-001         0.199      0.1955
C789         C789-002         0.189      0.1955
C789         C789-003         0.192      0.1955
C789         C789-004         0.201      0.1955
...          ...              ...        ...

除其他外,我尝试了 groupby,但鉴于在这种情况下我真的不知道如何使用它,这并没有给我想要的输出。

谢谢!

标签: pythonpandaspandas-groupbymedian

解决方案


groupby与 一起使用transform

df['Median'] = df.groupby('BatchID')['Score'].transform('median')

输出:

  BatchID    UnitID  Score  Median
0    A123  A123-100  0.111  0.1065
1    A123  A123-101  0.121  0.1065
2    A123  A123-102  0.101  0.1065
3    A123  A123-103  0.102  0.1065
4    B456  B456-200  0.211  0.2160
5    B456  B456-201  0.221  0.2160
6    C789  C789-001  0.199  0.1955
7    C789  C789-002  0.189  0.1955
8    C789  C789-003  0.192  0.1955
9    C789  C789-004  0.201  0.1955

推荐阅读