如果另一列中的值为null,则删除重复项

2024-09-27 07:27:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我所拥有的:

测向

Name |Vehicle

Dave |Car
Mark |Bike
Steve|Car
Dave |
Steve|

我想删除Name列中的重复项,但前提是Vehicle列中的对应值为null。 我知道我可以用

 df.dropduplicates(subset=['Name']) 

使用Keep=First或Last,但我要寻找的是从Name列中删除重复项的方法,其中Vehicle列的对应值为null。因此,基本上,如果Vehicle列不为null,则保留名称并删除休息。如果名称没有重复项,则保留该行,即使Vehicle中的对应值为null。你知道吗

非常感谢


Tags: name名称dfcarnullstevefirstmark
2条回答

这将过滤掉None和空值(如果存在任何非None或非空值),只保留Vehicle遇到的第一个值

import pandas as pd

df=pd.DataFrame({"Name": ["Dave", "Mark", "Steve", "Dave", "Steve"], "Vehicle": ["Car", "Bike", "Car", None, ""]})

res=df.sort_values("Vehicle", ascending=False).groupby("Name")["Vehicle"].first().reset_index()

输出:

    Name Vehicle
0   Dave     Car
1   Mark    Bike
2  Steve     Car

我认为您需要具有位AND&)和^{}^{}的链2掩码:

m1 = df['Vehicle'].notna()
m2 = ~df['Name'].duplicated()

df1 = df[m1 & m2]
print (df1)
    Name Vehicle
0   Dave     Car
1   Mark    Bike
2  Steve     Car

如果要分别执行这些操作-首先删除所有nan行,然后删除重复项,以避免测试NaN行中的重复项(如果需要):

df2 = df.dropna(subset=['Vehicle']).drop_duplicates('Name')
print (df2)
    Name Vehicle
0   Dave     Car
1   Mark    Bike
2  Steve     Car

相关问题 更多 >

    热门问题