2016-07-25 5 views
1

Если у меня есть DataFrame таких какКак ранжировать DataFrame по подгруппе

col1 col2 col3 
0 x1 typeA  3 
1 x2 typeB 13 
2 x3 typeB  3 
3 x4 typeA  5 
4 x5 typeB  1 
5 x6 typeA  1 

есть способ ранжирования строк по col3 для каждого типа в col2? Например, это решение будет выглядеть

col1 col2 col3 rank 
0 x1 typeA  3 2 
1 x2 typeB 13 1 
2 x3 typeB  3 2 
3 x4 typeA  5 1 
4 x5 typeB  1 3 
5 x6 typeA  1 3 

ответ

1

transform сохраняет ту же форму, как ваш оригинальный dataframe. Затем используйте lambda функцию для ранжирования col3 на основе группировок из col2 ..

df['col4'] = df.groupby('col2').col3.transform(lambda group: group.rank()) 

>>> df 
    col1 col2 col3 col4 
0 x1 typeA  3  2 
1 x2 typeB 13  3 
2 x3 typeB  3  2 
3 x4 typeA  5  3 
4 x5 typeB  1  1 
5 x6 typeA  1  1 
+0

я думаю, что это может быть сделано без лямбда-функции:.. '.groupby ('col2') col3.transform ('ранг') astype (np.int8) ' – MaxU

+0

@MaxU Я тоже это пробовал, но результаты разные. – Alexander

+0

упс! я этого не заметил ... извините ... – MaxU

Смежные вопросы