使用重复列删除Pandas中的选定行

时间:2018-06-14 00:08:03

标签: python pandas

假设我有一个这样的数据框:

fname    lname     email

Joe      Aaron   
Joe      Aaron     some@some.com
Bill     Smith 
Bill     Smith
Bill     Smith     some2@some.com

是否有一种简洁方便的方法来删除{fname,lname}重复且电子邮件为空的行?

2 个答案:

答案 0 :(得分:1)

你应该先检查一下你的空白"数据为NaN或空字符串。如果它们是混合物,您可能需要修改以下逻辑。

如果空行是NaN

使用pd.DataFrame.sort_valuespd.DataFrame.drop_duplicates

df = df.sort_values('email')\
       .drop_duplicates(['fname', 'lname'])

如果空行是字符串

如果您的空行是字符串,则需要在排序时指定ascending=False

df = df.sort_values('email', ascending=False)\
       .drop_duplicates(['fname', 'lname'])

结果

print(df)

  fname  lname           email
4  Bill  Smith  some2@some.com
1   Joe  Aaron   some@some.com

答案 1 :(得分:0)

您可以将firstgroupby一起使用(注意将空格替换为np.nan,因为first将为每列返回第一个非空值)

df.replace('',np.nan).groupby(['fname','lname']).first().reset_index()
Out[20]: 
  fname  lname           email
0  Bill  Smith  some2@some.com
1   Joe  Aaron   some@some.com