熊猫-用低于/更少的观察值百分比替换值

我有一个这样的 df:

>>> a = [1, 2, 3, 4, 5, 6, 7, 8]
>>> df = pd.DataFrame({'a': a})
>>> df
   a
0  1
1  2
2  3
3  4
4  5
5  6
6  7
7  8

我想用显示有多少观察值小于值(以百分比为单位)的值替换这些值。像这样:

>>> df
   a  how_many_percent_of_observations_are_less_than_value_from_a
0  1  0 (no observations that are lower, 0/8)
1  2  .125 (one observation is lower, 1/8)
2  3  .25 (two observations are lower, 2/8)
3  4  
4  5  
5  6  
6  7  
7  8  .875 (7 observations are lower, 7/8)

回答

您可以使用 numpy 广播来测试a值是否不太像相同的值,然后计算True每个 s 的数量'columns'并除以数组的长度:

a = df.a.to_numpy()

print (a[:, None] < a)
[[False  True  True  True  True  True  True  True]
 [False False  True  True  True  True  True  True]
 [False False False  True  True  True  True  True]
 [False False False False  True  True  True  True]
 [False False False False False  True  True  True]
 [False False False False False False  True  True]
 [False False False False False False False  True]
 [False False False False False False False False]]


df['new'] = (a[:, None] < a).sum(axis=0) / len(a)
print (df)
   a    new
0  1  0.000
1  2  0.125
2  3  0.250
3  4  0.375
4  5  0.500
5  6  0.625
6  7  0.750
7  8  0.875


以上是熊猫-用低于/更少的观察值百分比替换值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>