группировка и ранжирование на основе строки в одном столбце - PullRequest
1 голос
/ 10 апреля 2020

Я работаю над фреймом данных, который содержит 70 сверх действий. У меня есть колонка, которая группирует эти 70 действий. Я хочу создать новый столбец, который является рангом строки из существующего столбца. Следующий пример фрейма данных:

DF = pd.DataFrame()
DF ['template']= ['Attk','Attk','Attk','Attk','Attk','Attk','Def','Def','Def','Def','Def','Def','Accuracy','Accuracy','Accuracy','Accuracy','Accuracy','Accuracy']
DF ['Stats'] = ['Goal','xG','xA','Goal','xG','xA','Block','interception','tackles','Block','interception','tackles','Acc.passes','Acc.actions','Acc.crosses','Acc.passes','Acc.actions','Acc.crosses']
DF=DF.sort_values(['template','Stats'])

enter image description here

Новый столбец, который я хотел создать, - это groupby [template] и ранжирование статистики алфавитный порядок.

Ожидаемый фрейм данных выглядит следующим образом:

enter image description here

У меня от 10 до 15 статов под каждым шаблоном .

1 Ответ

0 голосов
/ 10 апреля 2020

Используйте GroupBy.transform с лямбда-функцией и factorize, также потому что python отсчитывает от 0 добавлено 1:

f = lambda x: pd.factorize(x)[0]
DF['Order'] = DF.groupby('template')['Stats'].transform(f) + 1
print (DF)
    template         Stats  Order
13  Accuracy   Acc.actions      1
16  Accuracy   Acc.actions      1
14  Accuracy   Acc.crosses      2
17  Accuracy   Acc.crosses      2
12  Accuracy    Acc.passes      3
15  Accuracy    Acc.passes      3
0       Attk          Goal      1
3       Attk          Goal      1
2       Attk            xA      2
5       Attk            xA      2
1       Attk            xG      3
4       Attk            xG      3
6        Def         Block      1
9        Def         Block      1
7        Def  interception      2
10       Def  interception      2
8        Def       tackles      3
11       Def       tackles      3
...