Vin*_*ent 6 python duplicates pandas
我有一个数据集:
id url keep_if_dup
1 A.com Yes
2 A.com Yes
3 B.com No
4 B.com No
5 C.com No
Run Code Online (Sandbox Code Playgroud)
我想删除重复项,即保留“url”字段的第一次出现,但如果字段“keep_if_dup”为YES ,则保留重复项。
预期输出:
id url keep_if_dup
1 A.com Yes
2 A.com Yes
3 B.com No
5 C.com No
Run Code Online (Sandbox Code Playgroud)
我试过的:
Dataframe=Dataframe.drop_duplicates(subset='url', keep='first')
Run Code Online (Sandbox Code Playgroud)
这当然不考虑“keep_if_dup”字段。输出是:
id url keep_if_dup
1 A.com Yes
3 B.com No
5 C.com No
Run Code Online (Sandbox Code Playgroud)
您可以将多个布尔条件传递给loc,第一个保留 col 'keep_if_dup' == 'Yes' 的所有行,这是ored(使用|)与 col 'url' 列是否重复的倒置布尔掩码:
In [79]:
df.loc[(df['keep_if_dup'] =='Yes') | ~df['url'].duplicated()]
Out[79]:
id url keep_if_dup
0 1 A.com Yes
1 2 A.com Yes
2 3 B.com No
4 5 C.com No
Run Code Online (Sandbox Code Playgroud)
覆盖您的 df 自分配:
df = df.loc[(df['keep_if_dup'] =='Yes') | ~df['url'].duplicated()]
Run Code Online (Sandbox Code Playgroud)
分解上面显示了2个布尔掩码:
In [80]:
~df['url'].duplicated()
Out[80]:
0 True
1 False
2 True
3 False
4 True
Name: url, dtype: bool
In [81]:
df['keep_if_dup'] =='Yes'
Out[81]:
0 True
1 True
2 False
3 False
4 False
Name: keep_if_dup, dtype: bool
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2755 次 |
| 最近记录: |