Получить квантиль столбца, только если значение другого столбца удовлетворяет условию - PullRequest
1 голос
/ 17 апреля 2020

У меня есть датафрейм с несколькими столбцами. Я хочу выполнить «двойную сортировку», при которой в самом нижнем 50-процентном слое столбца A я извлекаю самый нижний 50-процентный столбец столбца B.

A      B
3     1.0
5     2.0
7     0.5
9     2.1

В этом примере 50-й процентиль A даст мне первые два ряда. Тогда 50-й процентиль B из этих двух будет 1,5. Таким образом, я должен вернуть что-то вроде столбца C:

A      B     C
3     1.0    True
5     2.0    False
7     0.5    False
9     2.1    False

Таким образом, важно, чтобы третий ряд не стал истинным.

Любая помощь очень ценится!

1 Ответ

2 голосов
/ 17 апреля 2020

Это то, что вам нужно?

(
    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 ниже квантиля 50% подмножества B, отфильтрованного по первому условию
  2. Выполните логическое И флага (C) и результаты шага 1 выше и обновить столбец C.
...