Есть ли способ удалить дубликаты в python на основе двух условий? - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь удалить дубликаты на основе двух условий, но я не смог.

Мой код такой:

df = pd.DataFrame({'State': ['NY', 'NY', 'FL', 'AL', 'NY', 'TX', 'FL', 'AL'],
                   'Quantity': [120, 162, 120, 120, 120, 72, 120, 81],
                   'Duplicate': ['TRUE', 'FALSE', 'TRUE', 'FALSE', 'TRUE', 'FALSE', 'TRUE', 'FALSE'],
                   'YN': ['FALSE', 'FALSE', 'TRUE', 'TRUE', 'TRUE', 'FALSE', 'TRUE', 'FALSE'],},
                  index=['One', 'Two', 'Three', 'One', 'Two', 'Three', 'One', 'Two'])

print("\n -------- Duplicate Rows ----------- \n")
print(df)

df1 = df.reset_index().drop_duplicates(subset=['Duplicate','YN'],
                                       keep='first').set_index('index')

print("\n ------- Unique Rows ------------ \n")
print(df1)

И результат:

index                                 
One      NY       120      TRUE  FALSE
Two      NY       162     FALSE  FALSE
Three    FL       120      TRUE   TRUE
One      AL       120     FALSE   TRUE

Однако я хочу удалить столбцы, в которых Duplicate и YN имеют значение TRUE.

Я пробовал несколько вещей, но при попытке запустить это:

df1 = df.reset_index().drop_duplicates(subset=['Duplicate' == 'TRUE' & 'YN' == 'TRUE],
                                       keep='first').set_index('index')

Я получаю следующая ошибка:

TypeError: unsupported operand type(s) for &: 'str' and 'str'

Я не могу найти, если моя ошибка, потому что столбцы логические, и мне нужно будет добавить третий столбец позже, где я должен был бы удалить, если три являются ИСТИНА

Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Python интерпретатор читает это так:

'TRUE' & 'YN'. Как будто вы пытаетесь выполнить «логическую операцию» между двумя строками.

Я полагаю, вам может потребоваться заменить & на and

0 голосов
/ 26 марта 2020

Вы можете выбрать подмножество записей, где Duplicate и YN имеют значение true, используя следующее:

df1 = df.loc[(df['Duplicate'] == True) & (df['YN'] == True)]
...