Выберите первую строку с определенной категорией, присутствующей в столбце кадра данных - PullRequest
0 голосов
/ 20 ноября 2019

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

data = [{'rider': 'x1', 'quarter':'q1' , 'tag':BB},
 {'rider': 'x1', 'quarter':'q2' , 'tag':BG},
 {'rider': 'x1', 'quarter':'q3' , 'tag':BB},
 {'rider': 'x2', 'quarter':'q1' , 'tag':BG},
 {'rider': 'x2', 'quarter':'q2' , 'tag':BB},
{'rider': 'x2', 'quarter':'q3' , 'tag':BB},
 {'rider': 'x2', 'quarter':'q4' , 'tag':BG},
{'rider': 'x3', 'quarter':'q1' , 'tag':BB},
 {'rider': 'x3', 'quarter':'q2' , 'tag':BB},
 {'rider': 'x3', 'quarter':'q3' , 'tag':BG},
  {'rider': 'x3', 'quarter':'q4' , 'tag':BG}
 ] 

 df = pd.DataFrame(data)

для каждого гонщика, я хочу выбрать строку с тегом BG, но только строку, когда тег появляется для первого гонщика. время. Я попытался установить подмножество и выполнить некоторые групповые операции, но они не помогли.

 O/P:
{'rider': 'x1', 'quarter':'q2' , 'tag':BG}
{'rider': 'x2', 'quarter':'q1' , 'tag':BG}
{'rider': 'x3', 'quarter':'q3' , 'tag':BG}

Большое спасибо за помощь!

1 Ответ

1 голос
/ 20 ноября 2019

Мы можем сделать

df.loc[df.tag=='BG'].drop_duplicates('rider')
Out[556]: 
  rider quarter tag
1    x1      q2  BG
3    x2      q1  BG
9    x3      q3  BG

Для dict

d=df.loc[df.tag=='BG'].drop_duplicates('rider').to_dict('r')
d
Out[559]: 
[{'quarter': 'q2', 'rider': 'x1', 'tag': 'BG'},
 {'quarter': 'q1', 'rider': 'x2', 'tag': 'BG'},
 {'quarter': 'q3', 'rider': 'x3', 'tag': 'BG'}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...