Панды рассчитывают долю подгруппы - PullRequest
0 голосов
/ 07 июня 2018

Вот pandas.core.series.Series

rate         a.status             
(0.0, 0.05]  20          4                
(0.05, 0.1]  20          7
             21          2
             11          1
(0.1, 0.15]  20          2
             21          1
(0.15, 0.2]  20          2
             21          1
(0.3, 0.35]  20          2
(0.35, 0.4]  20          2
(0.45, 0.5]  20          2
(0.55, 0.6]  20          1
(0.6, 0.65]  20          1 

Я хочу рассчитать долю статуса 20 для каждой ставки, результат должен быть

rate               proportion
(0.0, 0.05]          1   <----    4/4
(0.05, 0.1]          0.7 <----  7/(7+2+1)

(0.1, 0.15]          0.66 <----  2/(2+1)

(0.15, 0.2]          0.66  <----  2/(2+1)

(0.3, 0.35]         1
(0.35, 0.4]         1
(0.45, 0.5]         1
(0.55, 0.6]         1
(0.6, 0.65]         1 

У меня естьпопытался [a ['a.status'] == 20] .count (), но это не работает.что мне делать?

1 Ответ

0 голосов
/ 07 июня 2018

Воспроизведение вашего тестового образца:

text = """rate         a.status             
(0.0,0.05]  20          4                
(0.05,0.1]  20          7
(0.05,0.1]  21          2
(0.05,0.1]  11          1
(0.1,0.15]  20          2
(0.1,0.15]  21          1
(0.15,0.2]  20          2
(0.15,0.2]  21          1
(0.3,0.35]  20          2
(0.35,0.4]  20          2
(0.45,0.5]  20          2
(0.55,0.6]  20          1
(0.6,0.65]  20          1 """

d = pd.read_csv(io.StringIO(text), sep="\s+").reset_index()

Шаги для выполнения расчетов:

1) groupby by index

2) выберите данные с необходимым rate

3) разделите на сумму внутри группы

Код:

rate = 20

d.groupby("index").apply(lambda x:
    x.loc[x["rate"] == rate, "a.status"] / x["a.status"].sum())

Результат:

index         
(0.0,0.05]  0     1.000000
(0.05,0.1]  1     0.700000
(0.1,0.15]  4     0.666667
(0.15,0.2]  6     0.666667
(0.3,0.35]  8     1.000000
(0.35,0.4]  9     1.000000
(0.45,0.5]  10    1.000000
(0.55,0.6]  11    1.000000
(0.6,0.65]  12    1.000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...