Я хочу удалить дублированные строки, чтобы значения в столбцах B
и C
после округления их до двух знаков после запятой равны
import pandas as pd
df = pd.DataFrame({"A":["f1", "f2", "f3", "f4"], "B":[1.2579,1.2586,1.7223,1], "C":[8.2579,8.2586,12.7223,14.0]})
A B C
0 f1 1.2579 8.2579
1 f2 1.2586 8.2586
2 f3 1.7223 12.7223
3 f4 1.0000 14.0000
Здесь после округления строки 0
и 1
имеют одинаковое значение. Вместо создания столбца B_round
и C_round
для удаления дубликатов, подобных этому
df['B_round'] = df['B'].values.round(2)
df['C_round'] = df['C'].values.round(2)
df = df.drop_duplicates(subset=['B_round', 'C_round'], keep='first')
который я должен удалить столбцы снова
df = df.drop(['B_round', 'C_round'], axis=1)
A B C
0 f1 1.2579 8.2579
2 f3 1.7223 12.7223
3 f4 1.0000 14.0000
Потому что мои реальные данные большие. Есть ли способ удалить их без создания нового набора столбцов?
Используйте DataFrame.duplicated
с инвертированием булевой маски с помощью ~
и boolean indexing
:
df = df[~df[['B', 'C']].round(2).duplicated()]
print (df)
A B C
0 f1 1.2579 8.2579
2 f3 1.7223 12.7223
3 f4 1.0000 14.0000
Другое решение - умножить на 100
и преобразовать значения в integer
s:
df = df[~df[['B', 'C']].mul(100).astype(int).duplicated()]
keep='first'
не имеет значения для.duplicated()
здесь. Это прекрасно работает. Ты такой быстрый.drop_duplicates