2017-08-15 91 views
1

我有如下Dataframe刪除重複行,如果包含所有相同的數值

df = pd.DataFrame({'first' : ['John', 'Mary','Peter'], 
         'last' : ['Mary', 'John','Mary']}) 

df 
Out[700]: 
    first last 
0 John Mary 
1 Mary John 
2 Peter Mary 

我想刪除重複的當行包含相同的值 在這種情況下,有望走出放將是:

first last 
0 John Mary 
2 Peter Mary 

下面是我的做法至今:

df['DropKey']=df.apply(lambda x: ''.join(sorted(pd.Series(x))),axis=1) 
df.drop_duplicates('DropKey') 

是個是否有任何有效的方法來實現這一目標?

我真正的數據大小:

df.shape 
Out[709]: (10000, 607) 
+0

你能與此不良信息幫助,所以回答 - https://stackoverflow.com/a/48346011/6361531 –

+0

@ScottBoston sure – Wen

回答

3
In [13]: pd.DataFrame(np.sort(df.values, axis=1), columns=df.columns).drop_duplicates() 
Out[13]: 
    first last 
0 John Mary 
2 Mary Peter 

或:

In [18]: df.values.sort(axis=1) # NOTE: it sorts DF in-place 

In [19]: df 
Out[19]: 
    first last 
0 John Mary 
1 John Mary 
2 Mary Peter 

In [20]: df.drop_duplicates() 
Out[20]: 
    first last 
0 John Mary 
2 Mary Peter 
+0

在你的第二種方法中,當你做一個'sort'時,它是如何從不同的列中排序的?是因爲'axis = 1'嗎? OP在第一個索引中有'mary'和'john'? –

+0

謝謝〜好像我需要再次閱讀numpy manuel :) – Wen

+1

@ i.n.n.m,'df.values'返回numpy NDArray。當我們做'ndarray.sort(axis = 1)' - 它不關心熊貓列... – MaxU

相關問題