假设我有一个这样的数据框:
fname lname email
Joe Aaron
Joe Aaron some@some.com
Bill Smith
Bill Smith
Bill Smith some2@some.com
是否有一种简洁方便的方法来删除{fname,lname}重复且电子邮件为空的行?
答案 0 :(得分:1)
你应该先检查一下你的空白"数据为NaN
或空字符串。如果它们是混合物,您可能需要修改以下逻辑。
使用pd.DataFrame.sort_values
和pd.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)
您可以将first
与groupby
一起使用(注意将空格替换为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