首页 > 解决方案 > 仅当另一列的值满足条件时才获取列的分位数

问题描述

我有一个包含多列的数据框。我想要一个“双重排序”,在 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

以这种方式,重要的是第三行不会变为真。

任何帮助深表感谢!

标签: pythonpandasdataframequantile

解决方案


这就是你所追求的吗?

(
    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% 分位数。

第二个分配做了两件事:

  1. 检查 B 是否低于第一个条件过滤的 B 子集的 50% 分位数
  2. 对标志 (C) 和上述步骤 1 的结果进行逻辑与并更新 C 列。

推荐阅读