Объединение строк с одинаковым индексом в фрейме данных

#pandas

#pandas

Вопрос:

У меня есть фрейм данных с видами и их встречаемостью. Далее следует выдержка:

  ------------- ------------ ------------------------------------------- -------------- ----------------- ------------- ----------- ------------ ---------- 
| Family      | Genus      | Species                                   | Species code | Nearctic Mexico | Mesoamerica | Caribbean | Los Llanos | Amazonia |
 ------------- ------------ ------------------------------------------- -------------- ----------------- ------------- ----------- ------------ ---------- 
| Acanthaceae | Aphelandra | Aphelandra castaneifolia Britton ex Rusby | Aphecast     |                 |             |           |            |          |
 ------------- ------------ ------------------------------------------- -------------- ----------------- ------------- ----------- ------------ ---------- 
| Acanthaceae | Aphelandra | Aphelandra pilosa Leonard                 | Aphpilo      |                 |             |           |            |          |
 ------------- ------------ ------------------------------------------- -------------- ----------------- ------------- ----------- ------------ ---------- 
| Acanthaceae | Aphelandra | Aphelandra pulcherrima (Jacq.) Kunth      | Aphepulc     |                 |             |           |            |          |
 ------------- ------------ ------------------------------------------- -------------- ----------------- ------------- ----------- ------------ ---------- 
| Acanthaceae | Aphelandra | Aphelandra sinclairiana Nees              | Aphesinc     |                 |             |           |            |          |
 ------------- ------------ ------------------------------------------- -------------- ----------------- ------------- ----------- ------------ ---------- 
 

Мне нужно анализировать только роды, но сохранять их вхождения следующим образом. Извините, если это настоящий вопрос новичка, но мне трудно выразить словами, что я намерен делать. Это ожидаемый результат:

  ------------- ------------ ----------------- ------------- ----------- ------------ ---------- 
| Family      | Genus      | Nearctic Mexico | Mesoamerica | Caribbean | Los Llanos | Amazonia |
 ------------- ------------ ----------------- ------------- ----------- ------------ ---------- 
| Acanthaceae | Aphelandra |                 |             |           |            |          |
 ------------- ------------ ----------------- ------------- ----------- ------------ ---------- 
 

Я обнаружил похожие проблемы, но имел дело с числовыми данными, и мне не удалось адаптировать решение.

Комментарии:

1. Вам нужен строковый эквивалент «max» столбцов местоположения? Итак, если где-нибудь есть плюс для этого рода, тогда дайте ему плюс?

Ответ №1:

Использовать GroupBy.first для первых значений, не являющихся ошибочными, для 5 столбцов:

 #if necessary replace empty space to missing values
df = df.replace('',np.nan)

cols = df.columns[4:].tolist()
df = df.groupby(['Family','Genus'], as_index=False)[cols].first()
print (df)
        Family       Genus  Nearctic Mexico Mesoamerica Caribbean Los Llanos  
0  Acanthaceae  Aphelandra              NaN                                    

  Amazonia  
0