#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