Python 查找行的匹配值并分别提取它们,而不指定匹配值(键)
我正试图在下面的数据框中提取具有匹配样本ID的行: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
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]
,这对我很有效。@CoryMaddenix
不推荐使用,请使用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您可以按索引分组,然后提取所需的组。@SureshRajadf1.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