Как сохранить значения в процентах на основе условия в другом столбце в панде - PullRequest
0 голосов
/ 27 сентября 2018

Пожалуйста, внимательно прочитайте этот вопрос, учитывая все аспекты, прежде чем отмечать его как дубликат.У меня также была стековая учетная запись, но, похоже, я забыл, по какому адресу электронной почты, таким образом, совершенно новый!

У меня есть df с несколькими столбцами и миллионами (буквально) строк.Вот пример, чтобы я мог быть более конкретным в своем вопросе, не раскрывая конфиденциальных данных:

a     b     c     d   ...   AAA      BBB   

---   ---  ---   ---  ...   hf4r     192
---   ---  ---   ---  ...   h23g     103
---   ---  ---   ---  ...   9fyd      7
---   ---  ---   ---  ...   hf4r     121
---   ---  ---   ---  ...   hf4r      32
---   ---  ---   ---  ...   h23g      12
...............             ............

Я хочу сохранить только те строки, значение BBB которых больше или равно 80-му процентилю BBB s для их конкретной AAA;для всех AAA.

Я работаю с пандами.Я пробовал in-line for s и .query s и просто обычные вызовы, но я, должно быть, делал что-то не так, потому что каждый раз моему компилятору не нравилось то или другое.Буду признателен за любые идеи.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Я бы сделал это, хотя я и проголосовал за ответ Вэна, потому что я не знал, что трансформация может это сделать.:)

df.loc[df.BBB >= df.describe(percentiles = [.8]).iloc[5]['BBB']]

Полный код:

import pandas as pd

data = {
    'AAA' : ['hf4r', 'hf4r', 'hf4r', 'hf4r', 'hf4r', 'hf4r'],
    'BBB' : [1, 2, 3, 4, 5, 6]
}

df = pd.DataFrame(data)
selected_values = df.loc[df.BBB >= df.describe(percentiles = [.8]).iloc[5]['BBB']]
print(df)
print(selected_values)

#     AAA  BBB
# 0  hf4r    1
# 1  hf4r    2
# 2  hf4r    3
# 3  hf4r    4
# 4  hf4r    5
# 5  hf4r    6

#     AAA  BBB
# 4  hf4r    5
# 5  hf4r    6
0 голосов
/ 27 сентября 2018

Похоже, вам нужно transform с quantile

df[df.BBB>=df.groupby('AAA').BBB.transform('quantile',0.8)]
...