我有一个数据框df
:
a = [['A',1,2,3], ['A',0,4,5], ['A',0,6,7],['A',4,6,2],['B',7,3,7],['B',1,6,8],['B',6,2,6],['B',2,5,1],['C',4,2,3],['C',3,9,2],['C',2,7,1],['C',2,3,7]]
df = pd.DataFrame(a, columns=['name','one', 'two', 'three'])
看起来像:
name one two three
0 A 1 2 3
1 A 0 4 5
2 A 0 6 7
3 A 4 6 2
4 B 7 3 7
5 B 1 6 8
6 B 6 2 6
7 B 2 5 1
8 C 4 2 3
9 C 3 9 2
10 C 2 7 1
11 C 2 3 7
如何创建一个新列,该列three
是name
值相同的列的中位数?所以我想要的输出看起来像:
name one two three median
0 A 1 2 3 4.0
1 A 0 4 5 4.0
2 A 0 6 7 4.0
3 A 4 6 2 4.0
4 B 7 3 7 6.5
5 B 1 6 8 6.5
6 B 6 2 6 6.5
7 B 2 5 1 6.5
8 C 4 2 3 2.5
9 C 3 9 2 2.5
10 C 2 7 1 2.5
11 C 2 3 7 2.5
因此,例如,其中name
= = A
3,5,7和2的中位数等于4.0,并输入到name等于的中位数列中A
。
您可以groupby().transform
:
df['median'] = df.groupby('name')['three'].transform('median')
输出:
name one two three median
0 A 1 2 3 4.0
1 A 0 4 5 4.0
2 A 0 6 7 4.0
3 A 4 6 2 4.0
4 B 7 3 7 6.5
5 B 1 6 8 6.5
6 B 6 2 6 6.5
7 B 2 5 1 6.5
8 C 4 2 3 2.5
9 C 3 9 2 2.5
10 C 2 7 1 2.5
11 C 2 3 7 2.5
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句