Процентиль Python ранга столбца, сгруппированный по нескольким другим столбцам - PullRequest
0 голосов
/ 17 мая 2019

Я хотел бы сгруппировать фрейм данных pandas по нескольким полям («дата» и «категория»), и для каждой группы ранжировать значения другого поля («значение») по процентилю, сохраняя при этом оригинал («значение»)) поле.

Я попытался:

df2 = df.groupby(['date', 'category'])['value'].rank(pct=True)

Но это возвращает только процентили для поля 'value'.

1 Ответ

1 голос
/ 17 мая 2019

Полагаю, вам нужно присвоить Series новому столбцу:

df = pd.DataFrame({
         'value':[1,3,5,7,1,0],
         'category':[5] * 6,
         'date':list('aaabbb')
})


df['new'] = df.groupby(['date', 'category'])['value'].rank(pct=True)
print (df)
   value  category date       new
0      1         5    a  0.333333
1      3         5    a  0.666667
2      5         5    a  1.000000
3      7         5    b  1.000000
4      1         5    b  0.666667
5      0         5    b  0.333333

Альтернатива с DataFrame.assign:

df = df.assign(new= df.groupby(['date', 'category'])['value'].rank(pct=True))
...