С таким фреймом данных:
df = pd.DataFrame({'id': [239,196,122,311,2336,194,],
'name': ['Boulanger','Bouygues Telecom','Darty','Electro Dépôt','Orange','Orange',],
'shops': [152, 500, 363, 81, 578, 577,],
'categoryids': [[5],[5],[5,3],[5],[15],[5],]})
Вы можете сделать:
df.sort_values('categoryids').drop_duplicates('name', keep='first')
Сортирует столбец categoryids
, затем удаляет дубликаты в name
и сохраняет первый из них.
EDIT:
Еще одна вещь, которую вы можете сделать, это проверить, существует ли значение, которое вы указали в столбце categoryids
:
df["exist"] = [int(5 in r) for r in df["categoryids"]]
Что даст вам:
id name shops categoryids exist
0 239 Boulanger 152 [5] 1
1 196 Bouygues Telecom 500 [5] 1
2 122 Darty 363 [5, 3] 1
3 311 Electro Dépôt 81 [5] 1
4 2336 Orange 578 [15] 0
5 194 Orange 577 [5] 1
И тогда вы можете взять только те, которые существуют:
df[df['exist'] == 1]
Затем найдите дубликаты, используя pd.duplicated()
, как упомянуто @Erfan:
df['dups'] = df['name'].duplicated(keep=False).astype(int)
id name shops categoryids exist dups
0 239 Boulanger 152 [5] 1 0
1 196 Bouygues Telecom 500 [5] 1 0
2 122 Darty 363 [5, 3] 1 0
3 311 Electro Dépôt 81 [5] 1 0
4 2336 Orange 578 [15] 0 1
5 194 Orange 577 [5] 1 1
df[(
(df['dups']!=1) |
(df['exist']!=0)
)].drop(['exist', 'dups'], axis=1).reset_index()
Результат:
index id name shops categoryids
0 0 239 Boulanger 152 [5]
1 1 196 Bouygues Telecom 500 [5]
2 2 122 Darty 363 [5, 3]
3 3 311 Electro Dépôt 81 [5]
4 5 194 Orange 577 [5]