2016-08-08 88 views
2

我有這個簡單的數據框:如何刪除特定列中的重複ID數據?

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

我想刪除State值重複IDs像這樣:

ID Name State 
1 John nan 
1 John nan 
2 Smith NE 
3 Janet nan 
3 Janet nan 
3 Janet nan 

不知道如何解決這個問題?

謝謝,

回答

2

duplicated返回一個布爾掩碼,其中行被複制過在subset定義的列。 keep=False表示我們不應將第一個或最後一個重複項視爲非重複項。然後使用loc可以讓我們分配到發生重複的行。

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

df 

enter image description here

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 
+0

你打我吧,但DF [ '名稱']重複(。 keep = False)== True,>>> df ['Name']。duplicated(keep = False),....不需要'== True' – Merlin

+0

@默林謝謝我會編輯。 – shivsn