Условное удаление дубликатов записей в Pandas - PullRequest
0 голосов
/ 31 августа 2018

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

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

Условие: удалить, если a2==a1 и b2<>b1.

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Вы можете отсортировать, а затем использовать 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 голосов
/ 31 августа 2018

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

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