Python 查找行的匹配值并分别提取它们,而不指定匹配值(键)

Python 查找行的匹配值并分别提取它们,而不指定匹配值(键),python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,我正试图在下面的数据框中提取具有匹配样本ID的行: df1 = pd.DataFrame([[1, 1.0, 2.3,0.2,0.53], [2, 3.35, 2.0,0.2,0.65], [2,3.4, 2.0,0.25,0.55], [3,3.4,2.0,0.25,0.55]], columns=["Sample_ID", "NaX", "NaU","OC","EC"])\ .set_index('S

我正试图在下面的数据框中提取具有匹配样本ID的行:

df1 = pd.DataFrame([[1, 1.0, 2.3,0.2,0.53], [2, 3.35, 2.0,0.2,0.65], [2,3.4, 
               2.0,0.25,0.55], [3,3.4,2.0,0.25,0.55]],
               columns=["Sample_ID", "NaX", "NaU","OC","EC"])\
               .set_index('Sample_ID') 
在上面的数据帧df1中,我只想获得Sample_ID为“2”的行。有没有一种方法可以在不指定匹配值(键)的情况下执行此操作

我想要的结果是:

       NaX NaU OC  EC
Sample_ID                  
   2   3.35    2.0 0.20    0.65 
   2   3.40    2.0 0.25    0.55

谢谢你读这篇文章

布尔索引可以做到这一点
Sample\u ID
是索引,因此需要使用
df1.index上的条件

In [34]: df1[df1.index == 2]
Out[34]: 
            NaX  NaU    OC    EC
Sample_ID                       
2          3.35  2.0  0.20  0.65
2          3.40  2.0  0.25  0.55
正如Scott Boston提到的,
df.loc
是另一个很好的选择。

使用:

输出:

            NaX  NaU    OC    EC
Sample_ID                       
2          3.35  2.0  0.20  0.65
2          3.40  2.0  0.25  0.55
要回答评论问题,您可以创建一个字典并按如下方式存储组:

list_of_df = {}
for n,g in df1.groupby(level=0):
    list_of_df[n] = g
然后用
g抓取您想要的任何组。获取组(2)


但这比它需要的要复杂得多。只要选择@ScottBoston的答案。

你试过了吗?这给我带来了一个
KeyError
。这里也是一样,KeyError我刚刚做了
df1.ix[2]
,这对我很有效。@CoryMadden
ix
不推荐使用,请使用loc/iloc或布尔索引谢谢,@cᴏʟᴅsᴘᴇᴇᴅ. 这就是我过去使用的方法,但我只是在模仿乔尼的方法。不过,很高兴知道。有没有办法不指定Sample_ID,而是将它们自动提取到不同的数据帧中,作为具有匹配Sample_ID的组?我问这个问题的原因是,对于较大的数据帧,我将不知道具有匹配值的样本ID号。感谢.list_of_df={}在df1中的n,g.groupby(level=0):list_of_df[n]=g这个解决方案适合我!是否有方法获取数组大于1的数组的数组df值列表?[如果len(数组df的列表[i])>1,则数组df的列表中的i为i]如果您只想存储大于1的那些df,可以使用过滤器。df1.groupby(level=0).filter(lambda x:x.shape[0]>1)谢谢!有没有办法不指定Sample_ID,而是将它们自动提取到不同的数据帧中,作为具有匹配Sample_ID的组?我问这个问题的原因是,对于较大的数据帧,我不知道具有匹配值的样本ID号。@SureshRaja您可以按索引分组,然后提取所需的组。@SureshRaja
df1.groupby(level=0)
get\u group
,太棒了。我接受您的赞扬!但是对于
get\u group
,可能有点夸大了。
list_of_df = {}
for n,g in df1.groupby(level=0):
    list_of_df[n] = g
g = df1.groupby(level=0)
            NaX  NaU    OC    EC
Sample_ID                       
2          3.35  2.0  0.20  0.65
2          3.40  2.0  0.25  0.55