python - pandas - 用低于/更少的观察百分比替换值
问题描述
我有一个这样的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)
解决方案
如果a
值不太像相同的值,您可以使用 numpy 广播进行测试,然后计算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
推荐阅读
- javascript - 如果日期是过去或将来,则删除 json 特定数据
- javascript - 请求标头未使用 Fetch API 填充
- typescript - VSCode 是否在工具提示中准确显示正确的 Typescipt 类型?no-unnecessary-type-assertion 错误
- javascript - 显示 JavaStript 结果中的所有值
- php - 音频跟踪/分析/统计
- hexo - Hexo 内部链接到页面部分
- jmeter - 线程组中各项的处理顺序是怎样的?
- c++ - 关于 C++ 中的 Lambda 函数
- php - php pdo查询while循环有问题
- vue.js - 如果数据属性在 VueJs 中从父组件传递到子组件,则无法将其作为对象进行操作