如果另一列中的值为空,则删除重复项 - 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
我有:
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
:
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