python - 仅当另一列的值满足条件时才获取列的分位数
问题描述
我有一个包含多列的数据框。我想要一个“双重排序”,在 A 列的最低 50%ile 内,我提取 B 列的最低 50%ile。
A B
3 1.0
5 2.0
7 0.5
9 2.1
在这个例子中,A 的第 50 个百分位会给我前两行。那么,这两个中 B 的第 50 个百分位数将是 1.5。因此,我应该返回类似于 C 列的内容:
A B C
3 1.0 True
5 2.0 False
7 0.5 False
9 2.1 False
以这种方式,重要的是第三行不会变为真。
任何帮助深表感谢!
解决方案
这就是你所追求的吗?
(
df.assign(C=df.A.lt(df.A.quantile(0.5)))
.assign(C=lambda x: x.C & x.B.lt(x.loc[x.C].B.quantile(0.5)))
)
A B C
0 3 1.1 False
1 5 0.9 True
2 7 2.0 False
3 9 2.1 False
第一个分配创建一个标志来指示 A 是否低于 50% 分位数。
第二个分配做了两件事:
- 检查 B 是否低于第一个条件过滤的 B 子集的 50% 分位数
- 对标志 (C) 和上述步骤 1 的结果进行逻辑与并更新 C 列。
推荐阅读
- r - 为什么我不安装包“plotGoogleMaps”?
- hugo - 用于登录、注销的 Hugo 动态导航栏菜单项
- javascript - 为什么 forEach 和 for...of 与异步函数的工作方式不同?
- php - Laravel 8 - 使用多态关系时无法设置 morphOne id
- c++ - 为什么在 C 中不允许使用 `&`,但在这种情况下在 C++ 中?有什么异议吗?
- c# - 如何从列表整数中使用最小键获取最大计数,linq 写在一个表达式中
- r - oneHotEncode R中的光栅层
- python - 将列设置为列索引 Pandas 数据框
- node.js - 即使使用 `credentials: 'include'` 也无法使用 cookie 获取
- python - 最小化 numpy 数组操作的运行时间