如何删除重复ID的特定列中的数据?

时间:2016-08-08 17:00:31

标签: python pandas dataframe duplicates

我有这个简单的数据框:

ID  Name    State
1   John    DC
1   John    VA
2   Smith   NE
3   Janet   CA
3   Janet   NC
3   Janet   MD      

我想删除重复State的{​​{1}}值,如下所示:

IDs

知道如何解决这个问题吗?

谢谢,

2 个答案:

答案 0 :(得分:2)

duplicated返回一个布尔掩码,其中行复制在subset中定义的列上。 keep=False表示我们不应将重复的第一个或最后一个视为非重复。然后使用loc允许我们分配重复发生的行。

df.loc[df.duplicated(subset=['ID'], keep=False), 'State'] = None

df

enter image description here

答案 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