2015-02-10 57 views
1

我有以下的數據幀:選擇行 - 基於名單上 - 從DF與重複列

import pandas as pd 
rep = pd.DataFrame.from_items([('Probe', ['x', 'y', 'z']), ('Gene', ['foo', 'bar', 'qux']), ('Probe',['x','y','z']), ("RP",[1.00,2.33,4.5])], orient='columns') 

主要生產:

In [11]: rep 
Out[11]: 
    Probe Gene Probe RP 
0  x foo  x 1.00 
1  y bar  y 2.33 
2  z qux  z 4.50 

需要注意的是有重複的列在那裏。 我想要做的是選擇基於名單上排:

ls = ["x", "z", "i"] 

屈服這樣的:

Probe Gene Probe RP 
0  x foo  x 1.00 
2  z qux  z 4.50 

請注意,我們希望保留在原有基礎上DF以上的列。

爲什麼失敗?

In [9]: rep[rep[[0]].isin(ls)] 
ValueError: cannot reindex from a duplicate axis 

什麼是正確的做法? isin的替代品?

回答

1

你應該在這裏使用ILOC:

In [11]: rep.iloc[rep.iloc[0].isin(ls).values] 
Out[11]: 
    Probe Gene Probe RP 
0  x foo  x 1.0 
2  z qux  z 4.5 

這首先創建的布爾向量(作爲一維數組,而不是一個數據幀),你可以用這個作爲掩模:

In [12]: rep.iloc[0].isin(ls).values 
Out[12]: array([ True, False, True, False], dtype=bool) 
1

您應該提及,如果問題ls中的列表包含屬於固定列的值,例如在此情況下爲Probe。如果是這種情況,那麼下面的工作。

rep.ix[rep.Probe.isin(ls).ix[:,1]]