Удалить дублирующиеся строки, но только если столбец равен NaN - PullRequest
1 голос
/ 08 апреля 2020

Я хочу удалить только те строки, в которых два столбца (ID, код) являются дубликатами, а третий столбец (Descrip) равен 'NaN'. Мой фрейм данных, df (показанный ниже) исправляет мой начальный фрейм данных, и вместо этого я хочу использовать df2.

df:

ID    Descrip    Code
1     NaN        CC
1     3          SS
2     4          CC
2     7          SS
3     NaN        CC
3     1          CC
3     NaN        SS
4     20         CC
4     22         SS
5     15         CC
5     10         SS
6     100        CC
6     NaN        CC
6     4          SS
6     NaN        SS


df2:

ID    Descrip    Code
1     NaN        CC
1     3          SS
2     4          CC
2     7          SS
3     1          CC
3     NaN        SS
4     20         CC
4     22         SS
5     15         CC
5     10         SS
6     100        CC
6     4          SS

Я знаю, используя df.drop (subset ['ID', 'Code'], keep = ' first '), удалит дублирующиеся строки, но я хочу, чтобы это было только там, где' Decrip '==' NaN '.

Ответы [ 2 ]

2 голосов
/ 08 апреля 2020

Вы можете использовать groupby и принять максимальное значение (каждое число больше, чем NaN):

df2 = df.groupby(["ID", "Code"])["Descrip"].max().reset_index()
1 голос
/ 08 апреля 2020

Я думаю, вы могли бы использовать:

df = df[~(df.duplicated(['ID','Code'], False) & df['Descrip'].isna())]

Где (и я постараюсь объяснить, насколько я понимаю):

  • df.duplicated(['ID','Code'], False) - Возвращает логическое значение, если в подмножестве ID и Code есть дубликаты, где False обеспечивает рассмотрение всех строк. Документация здесь .
  • df['Descrip'].isna() - Проверяет, удерживает ли Descrip NaN. Документация здесь
  • df[~(....first point above .... & .... second point above ....)] - тильда означает оператор not для инвертирования логической маски, и амперсанд объединяет эти два выражения вместе с побитовым and, вместе отфильтровывая строки представляет интерес. Документация здесь .

Результат:

    ID  Descrip Code
0    1      NaN   CC
1    1        3   SS
2    2        4   CC
3    2        7   SS
5    3        1   CC
6    3      NaN   SS
7    4       20   CC
8    4       22   SS
9    5       15   CC
10   5       10   SS
11   6      100   CC
13   6        4   SS
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...