我有这个简单的数据框:
ID Name State
1 John DC
1 John VA
2 Smith NE
3 Janet CA
3 Janet NC
3 Janet MD
我想删除重复State
的{{1}}值,如下所示:
IDs
知道如何解决这个问题吗?
谢谢,
答案 0 :(得分:2)
duplicated
返回一个布尔掩码,其中行复制在subset
中定义的列上。 keep=False
表示我们不应将重复的第一个或最后一个视为非重复。然后使用loc
允许我们分配重复发生的行。
df.loc[df.duplicated(subset=['ID'], keep=False), 'State'] = None
df
答案 1 :(得分:2)
您可以使用np.where:
In[25]:df['State']=np.where(df['Name'].duplicated(keep=False),np.nan,df['State'])
In[26]:df
Out[26]:
ID Name State
0 1 John NaN
1 1 John NaN
2 2 Smith NE
3 3 Janet NaN
4 3 Janet NaN
5 3 Janet NaN
时序:
%timeit df.loc[df.duplicated(subset=['ID'], keep=False), 'State'] = None
100 loops, best of 3: 2.32 ms per loop
%timeit df['State']=np.where(df['Name'].duplicated(keep=False),np.nan,df['State'])
1000 loops, best of 3: 657 µs per loop