我要做的是按ColA分组,并计算该组的ColB值与ColB中值之间的比率。此比率将是一个新列。
原始DF
ColA ColB
grp1 2
grp1 10
grp1 8
grp1 22
grp2 6
grp2 14
grp2 12
grp2 32
grp3 10
grp3 20
grp3 30
grp3 6
grp1的中位数为9.0,grp2为13.0,grp3为15。因此,新列(ColC(只是ColB和组中值之间的比率。因此:
所需DF
ColA ColB ColC
grp1 2 0.22
grp1 10 1.11
grp1 8 0.89
grp1 22 2.44
grp2 6 0.46
grp2 14 1.07
grp2 12 0.92
grp2 32 2.46
grp3 10 0.66
grp3 20 1.33
grp3 30 2.00
grp3 6 0.40
试用groupby
:
data["ColC"] = data["ColB"].div(data.groupby("ColA")["ColB"].transform("median"))
>>> data
ColA ColB ColC
0 grp1 2 0.222222
1 grp1 10 1.111111
2 grp1 8 0.888889
3 grp1 22 2.444444
4 grp2 6 0.461538
5 grp2 14 1.076923
6 grp2 12 0.923077
7 grp2 32 2.461538
8 grp3 10 0.666667
9 grp3 20 1.333333
10 grp3 30 2.000000
11 grp3 6 0.400000