Панды: отбрасывать дублирующиеся строки с одинаковыми «округленными» значениями без создания новых столбцов - PullRequest
0 голосов
/ 25 сентября 2018

Я хочу удалить дублированные строки, значения которых в столбцах B и C после их округления до 2 десятичных знаков равны

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

Поскольку мои реальные данные большие.Есть ли способ удалить их, не создавая новый набор столбцов?

1 Ответ

0 голосов
/ 25 сентября 2018

Используйте 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()]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...