Pandas не сбрасывает nan

#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 помощью опции для вызова.