从具有重复列的 DF 中基于列表选择行
Selecting rows - based on a list - from a DF with duplicated columns
我有以下数据框:
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
请注意,那里有重复的列。
我想要做的是 select 基于列表的行:
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
的任何替代方案?
你应该在这里使用 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
这首先创建了布尔向量(作为一维数组而不是 DataFrame),您可以将其用作掩码:
In [12]: rep.iloc[0].isin(ls).values
Out[12]: array([ True, False, True, False], dtype=bool)
您可能应该提及所讨论的列表 ls
是否包含属于固定列的值,例如,在本例中为 Probe
。如果是这种情况,那么下面的工作。
rep.ix[rep.Probe.isin(ls).ix[:,1]]
我有以下数据框:
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
请注意,那里有重复的列。 我想要做的是 select 基于列表的行:
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
的任何替代方案?
你应该在这里使用 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
这首先创建了布尔向量(作为一维数组而不是 DataFrame),您可以将其用作掩码:
In [12]: rep.iloc[0].isin(ls).values
Out[12]: array([ True, False, True, False], dtype=bool)
您可能应该提及所讨论的列表 ls
是否包含属于固定列的值,例如,在本例中为 Probe
。如果是这种情况,那么下面的工作。
rep.ix[rep.Probe.isin(ls).ix[:,1]]