Pandas groupby присваивает любые значения, отличные от nan

#python #python-3.x #pandas

#python #python-3.x #pandas

Вопрос:

Я пытаюсь выполнить groupby в таблице, где с учетом этого индекса groupby все значения либо правильные, либо Nan. НАПРИМЕР:

     id country    name
0    1  France    None
1    1  France  Pierre
2    2    None   Marge
3    1    None  Pierre
4    3     USA     Jim
5    3    None     Jim
6    2      UK    None
7    4   Spain  Alvaro
8    2    None   Marge
9    3    None     Jim
10   4   Spain    None
11   3    None     Jim
  

Я просто хочу получить значения для каждого из 4 человек, которые никогда не должны конфликтовать, например:

    country    name
id                
1   France  Pierre
2       UK   Marge
3      USA     Jim
4    Spain  Alvaro
  

Я пытался:

 groupby().first()
groupby.nth(0,dropna='any'/'all')
  

и даже

 groupby().apply(lambda x: x.loc[x.first_valid_index()])
  

Все безрезультатно. Чего мне не хватает?

РЕДАКТИРОВАТЬ: чтобы помочь вам создать пример фрейма данных для тестирования:

 df = pd.DataFrame({'id':[1,1,2,1,3,3,2,4,2,3,4,3],'country':['France','France',None,None,'USA',None,'UK','Spain',None,None,'Spain',None],'name':[None,'Pierre','Marge','Pierre','Jim','Jim',None,'Alvaro','Marge','Jim',None,'Jim']})
  

Ответ №1:

Pandas groupby.first возвращает первое ненулевое значение, но не поддерживает None, попробуйте

 df.fillna(np.nan).groupby('id').first()

    country name
id      
1   France  Pierre
2   UK      Marge
3   USA     Jim
4   Spain   Alvaro
  

Ответ №2:

Возможно указание на dropna , когда значения None

 df.groupby('id').first(dropna=True)

   country    name
id                
1   France  Pierre
2       UK   Marge
3      USA     Jim
4    Spain  Alvaro