使用这样的 DataFrame:
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
并保留第一个。
编辑:
您可以做的另一件事是检查您在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]