2017-01-20 59 views

回答

3

你可以讓自己的定位順序可以在整個總犯同樣的兩列進行排序。然後,通過在DF.drop_duplicates()方法中提供keep=False來刪除所有這樣的重複條目。

df[['C','D']] = np.sort(df[['C','D']].values) 
df.drop_duplicates(keep=False) 

enter image description here

+0

這看起來確實可行,即使你必須小心,因爲「C」和「D」值可以交換(如果D大於C,這裏不是這種情況) –

+0

是的,這就是爲什麼我必須在整理之前將它們整理一遍。 –

2

你可以用

df.C == df.D 

0  True 
1 False 
2 False 
3  True 
4 False 
dtype: bool 

的比較兩列則一連降檔。

0  NaN 
1  True 
2 False 
3 False 
4  True 
dtype: object 

每個True值表示新組的開始。我們可以使用cumsum創建我們需要爲groupby

(df.C == df.D).shift().fillna(False).cumsum() 

0 0 
1 1 
2 1 
3 1 
4 2 
dtype: int64 

的分組然後使用groupy + last

df.groupby(df.C.eq(df.D).shift().fillna(False).cumsum()).last() 

    A B C D 
0 x y 1 1 
1 x y 2 2 
2 x y 3 4 
+0

@MaxU做我的編輯澄清的問題? – piRSquared

+0

您的解決方案假定DataFrame值。 –

+0

@fast_cen這是什麼假設? – piRSquared

0

如果你想刪除其中「C」和「d」匹配的行中,方法.ix將幫助您:

df = df.ix[(df['C'] != df['D'])]

因此,df['C'] != df['D']產生布爾值的列表,並.ix允許你提取相應DataFrame :)

相關問題