Условное удаление дубликатов записей в Pandas

1

Как удалить дубликаты записей в Pandas DataFrame, приведенные ниже.

a   b   c   d
11216   08-08-2018  2000    SIP
40277   28-08-2018  1000    SIP
44165   02-08-2018  8000    Lump
44165   03-08-2018  5000    Lump
45845   16-08-2018  25000   Lump
45845   18-08-2018  50000   Lump
52730   13-08-2018  10000   Lump
52730   27-08-2018  10000   Lump
53390   20-08-2018  400000  Lump
56180   02-08-2018  1000    Lump
58537   11-07-2018  5000    Lump
58537   22-08-2018  2000    SIP
912813  15-08-2018  160001  Lump
912813  15-08-2018  6000    SIP
85606   16-08-2018  3500    SIP
88327   06-08-2018  5000    SIP
90240   07-08-2018  2000    SIP

Желаемый результат:

a   b   c   d
11216   08-08-2018  2000    SIP
40277   28-08-2018  1000    SIP
44165   02-08-2018  8000    Lump
45845   16-08-2018  25000   Lump
52730   13-08-2018  10000   Lump
53390   20-08-2018  400000  Lump
58537   11-07-2018  5000    Lump
912813  15-08-2018  160001  Lump
912813  15-08-2018  6000    SIP
85606   16-08-2018  3500    SIP
88327   06-08-2018  5000    SIP
90240   07-08-2018  2000    SIP

Условие: remove if a2==a1 и b2<>b1.

  • 0
    Почему исчез a = 51680 ?
  • 0
    @ReblochonMasque, вы уверены, что это дубликат? Т.е. смотрите мой ответ против ответов в дупе, они совершенно разные.
Показать ещё 1 комментарий
Теги:
pandas
dataframe
python-3.x

2 ответа

0
Лучший ответ

Сначала вам нужно добавить их в список, а затем этот код может удалить дублированные элементы с вашими условиями.

i = 0 
while i < len(a)-1 :
    if a[i] == a[i+1] and if b[i] != b[s] :
        del a[i]
        del b[i]
        del c[i]
        del d[i]
        i -= 1 
    i += 1 
  • 1
    Я думаю, что он использует панды здесь
1

Вы можете сортировать, затем использовать duplicated с условием or:

res = df.sort_values(['a', 'b'])\
        .loc[(~df['a'].duplicated()) | df[['a', 'b']].duplicated(keep=False)]

print(res)

         a           b       c     d
0    11216  08-08-2018    2000   SIP
1    40277  28-08-2018    1000   SIP
2    44165  02-08-2018    8000  Lump
4    45845  16-08-2018   25000  Lump
6    52730  13-08-2018   10000  Lump
8    53390  20-08-2018  400000  Lump
9    56180  02-08-2018    1000  Lump
10   58537  11-07-2018    5000  Lump
14   85606  16-08-2018    3500   SIP
15   88327  06-08-2018    5000   SIP
16   90240  07-08-2018    2000   SIP
12  912813  15-08-2018  160001  Lump
13  912813  15-08-2018    6000   SIP
  • 0
    выше, мне нужно добавить, используя, и если условие ответа больше 5000 хорошо и низко 3000 плохо
  • 0
    @KarthikaiVasan, пожалуйста, не меняй свой вопрос, я откатился. Если у вас есть новый вопрос, вы должны задать его отдельно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню