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

Drop duplicate if the value in another column is null - Pandas

我有:

df

Name |Vehicle

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

我想从名称列中删除重复项,但前提是车辆列中的相应值为空。 我知道我可以使用

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

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

非常感谢

我认为您需要使用按位 AND (&) 和 Series.notna and Series.duplicated:

链式 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

这将过滤掉 None 和空值(如果有任何非 None 或非空值),只保留 [=14= 的第一个遇到的值]

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