Панды: группировка по идентификатору и удаление строк, содержащих наибольшее количество значений NaN - PullRequest
1 голос
/ 19 сентября 2019

Я получил DataFrame Pandas, где у меня есть несколько строк с одинаковым идентификатором.Я хочу сгруппировать их по идентификатору и проверить, какая строка содержит наименьшее количество значений NaN (или ноль) и отбросить остальные.

Я хочу, чтобы мой последний DataFrame содержал только одну строку на Id и максимальный объем информации БЕЗ итерации строки на строку.

В случае, если две или более строки содержат наименьшее количество NaN (илиноль) значения Я бы применил второй логический фильтр, который я еще не определил.Это будет что-то вроде этого:

Исходная таблица:

     ID      A      B      C      D      E
1     4     56    NaN    890    aaa    907
2     4    NaN    NaN    890    aaa    907
3     7     89     78    754    bbb      1
4     7     89    NaN    754    bbb      1
5     7     89     78    754    bbb    NaN

Финальная таблица:

     ID      A      B      C      D      E
1     4     56    NaN    890    aaa    907
3     7     89     78    754    bbb      1

1 Ответ

7 голосов
/ 19 сентября 2019

Вот одно суммирование NaNs за строку и взятие idxmin в каждой группе:

df.loc[df.isna().sum(1).groupby(df.ID).idxmin()]

   ID     A     B    C    D      E
1   4  56.0   NaN  890  aaa  907.0
3   7  89.0  78.0  754  bbb    1.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...