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

时间:2020-04-17 01:39:15

标签: python pandas dataframe quantile

我有一个包含多列的数据框。我想进行“双重排序”,在A列的最低50%范围内提取B列的最低50%范围。

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

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

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

这是你的追求吗?

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

第二个分配完成2件事:

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