仅当另一列的值满足条件时才获取列的分位数

Get quantile of column only if value of another column satisfies condition

我有一个包含多列的数据框。我想要一个 "double sort",在 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。因此我应该 return 类似 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% 分位数。

第二个赋值做了两件事:

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