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

Nit*_*iry 3 python pandas drop-duplicates

我拥有的:

df

Name |Vehicle
Run Code Online (Sandbox Code Playgroud)
Dave |Car
Mark |Bike
Steve|Car
Dave |
Steve|
Run Code Online (Sandbox Code Playgroud)

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

 df.dropduplicates(subset=['Name']) 
Run Code Online (Sandbox Code Playgroud)

使用任何Keep =一种,'First' or 'Last'但我正在寻找的是一种从Name列的相应值是 的Vehicle列中删除重复项的方法null。所以基本上,保留NameifVehicle不为空并删除其余部分。如果名称没有重复,即使相应的值为Vehicle空,也保留该行。

非常感谢

jez*_*ael 7

我认为您需要按位AND( &)Series.notna和2 个链式掩码Series.duplicated

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
Run Code Online (Sandbox Code Playgroud)

如果需要单独进行这些操作 - 首先删除所有 NaNs 行,然后删除重复项以避免测试NaNs 行中的重复项(如有必要):

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