#python #pandas
#python #pandas
Вопрос:
У меня есть следующая группа
unemp nobsRel measure rank nobsRel2 nobsCumSummed
year foo
2000 8010 0.000024 0.000167 1.0 348.0 0.000167 0.980176
4950 0.000264 0.003630 1.0 349.0 0.003630 0.983806
2540 0.000438 0.011027 1.0 350.0 0.011027 0.994833
9830 0.000118 0.000118 NaN NaN 0.000118 0.994952
9920 0.005048 0.005048 NaN NaN 0.005048 1.000000
Вот что происходит, когда я пытаюсь удалить дубликаты:
В [104]: test.drop_duplicates(подмножество = ‘ранг’) Out[104]:
unemp nobsRel measure rank nobsRel2 nobsCumSummed
year foo
2000 8010 0.000024 0.000167 1.0 348.0 0.000167 0.980176
4950 0.000264 0.003630 1.0 349.0 0.003630 0.983806
2540 0.000438 0.011027 1.0 350.0 0.011027 0.994833
9830 0.000118 0.000118 NaN NaN 0.000118 0.994952
Почему последняя строка все еще там? Он отсутствует!
In[105]: np.isnan(test.loc[(2000, 9830), 'rank'])
Out[105]:
True
Я на pandas
0.19.0
Комментарии:
1. Это поведение по умолчанию:
Drop duplicates except for the first occurrence
, поэтому попробуйте:test.drop_duplicates(subset='rank', keep=False)
вместо2. Я только что вернулся после редактирования своего ответа, чтобы найти это. Почему вы не добавили его в качестве ответа, тогда я мог бы удалить свой (который в любом случае был неправильным до редактирования).
Ответ №1:
drop_duplicates()
Метод удаляет дубликаты, кроме первого (по умолчанию). Однако вы можете выбрать, какой из них сохранить, изменив параметр keep last
, first
установив для него значение или False
. Посмотрите документацию здесь
Попробуйте это :
test.drop_duplicates(subset='rank', keep=False)
Комментарии:
1. Хороший ответ. Предоставляет именно необходимую информацию с полезной ссылкой. Продолжайте в том же духе!
2. @holdenweb Большое спасибо за вашу поддержку! Я стараюсь быть как можно более точным и как можно более синтетическим!
Ответ №2:
К сожалению, похоже, что drop_duplicates
это не делает то, что вы хотите. Он удаляет дубликаты, но не исходную строку, дубликаты которой являются дубликатами…
К счастью, это можно переопределить с keep=False
помощью опции для вызова.