Как отсортировать строки по минимальным значениям и заменить их на Pandas? - PullRequest
0 голосов
/ 29 апреля 2020

Предположим, у меня есть DataFrame:

import pandas as pd

dict1 = {'Name':['John', 'Sean', 'Philip', 'John', 'Sean', 'Philip'],
     'c_1':['a','b','c','d','f','g'],
     'c_2':[1,2,3,4,2,3],
     'c_3':[2,3,4,2,1,1]} 

df = pd.DataFrame(dict1)

И вывод:

     Name c_1  c_2  c_3
0    John   a    1    2
1    Sean   b    2    3
2  Philip   c    3    4
3    John   d    4    2
4    Sean   f    2    1
5  Philip   g    3    1

Требуемый вывод:

     Name c_1  c_2  c_3
0    John   a    1    2
1    Sean   f    2    1
2  Philip   g    3    1

Мне нужно найти строку с минимальные значения c_1 и c_2 для каждого имени.
c_1 имеет высокий приоритет (это означает, что (c_1 = 1) & (c_2 = 2) важнее (и требуется), чем (c_1 = 2) & (c_2 = 1) ).
Я пытался использовать циклы, но это было безуспешно, потому что у меня огромный DF, и мой P C делал бы это долгое время.

Как я могу сделать это самым простым способом? ?

Большое спасибо за ответ!

1 Ответ

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

Вы можете использовать sort_values:

df.sort_values(['Name','c_2','c_3']).groupby('Name').agg('first')

       c_1  c_2  c_3
Name                
John     a    1    2
Philip   g    3    1
Sean     f    2    1

Если вы хотите сохранить порядок имен, преобразуйте столбец в categorical:

df['Name'] = pd.Categorical(df.Name, categories=df.Name.unique())
df.sort_values(['Name','c_2','c_3']).groupby('Name').agg('first')

       c_1  c_2  c_3
Name                
John     a    1    2
Sean     f    2    1
Philip   g    3    1
...