У меня есть этот DataFrame:

df = pd.DataFrame(np.array([
        [1, 'Black', 233, 342],
        [1, 'White', 342, 1222],
        [1, 'Orange', 432, 1234],
        [1, 'Orange', 2234, 1345],
        [1, 'Orange', 2234, 1345],
        [2, 'Pink', 444, 222],
        [2, 'White', 35345, 2345434],
        [3, 'Black', 4544, 2222],
        [4, 'White', 4433, 123],
        [4, 'White', 4433, 123],
        [4, 'White', 4433, 123],
        [4, 'White', 4433, 123],
        [4, 'White', 4433, 123],
        [4, 'White', 4433, 123],
]), columns=['ID', 'TITLE', 'ITEM_ID', 'CARD_ID'])
   ID   TITLE ITEM_ID  CARD_ID
0   1   Black     233      342
1   1   White     342     1222
2   1  Orange     432     1234
3   1  Orange    2234     1345
4   1  Orange    2234     1345
5   2    Pink     444      222
6   2   White   35345  2345434
7   3   Black    4544     2222
8   4   White    4433      123
9   4   White    4433      123
10  4   White    4433      123
11  4   White    4433      123
12  4   White    4433      123
13  4   White    4433      123

Я хочу получить только строки с одинаковым идентификатором, но с другим TITLE (когда TITLE больше одного, конечно, и удалить повторяющийся TITLE):

   ID   TITLE ITEM_ID  CARD_ID
0   1   Black     233      342
1   1   White     342     1222
2   1  Orange     432     1234
5   2    Pink     444      222
6   2   White   35345  2345434

Пожалуйста, помогите мне.

1
Weblloyd 9 Окт 2020 в 14:14

1 ответ

Лучший ответ

Сгруппировать по ID, удалить строки, в которых количество уникальных значений в TITLE равно 1; после этого вы можете удалить дубликаты.

(df.loc[df.groupby("ID")
          .TITLE
          .transform("nunique")
          .gt(1)]
   .drop_duplicates(["ID", "TITLE"])
  )



    ID  TITLE   ITEM_ID     CARD_ID
0   1   Black   233     342
1   1   White   342     1222
2   1   Orange  432     1234
5   2   Pink    444     222
6   2   White   35345   2345434
1
sammywemmy 9 Окт 2020 в 11:18