按组索引获取组

Getting groups by group index

我想按组索引访问组。我的数据框如下所示

import pandas as pd
from io import StringIO
import numpy as np

data = """
id,name
100,A
100,B
100,C
100,D
100,pp;
212,E
212,F
212,ds
212,G
212, dsds
212, sas
300,Endüstrisi`
"""
df = pd.read_csv(StringIO(data))

我想分组 'id' 并通过组索引访问组。

dfg=df.groupby('id',sort=False,as_index=False)
dfg.get_group(0)

我期待 return 第一组是 id =1 的组(这是第一组)

您需要 id 的传递值:

dfg=df.groupby('id',sort=False)
a = dfg.get_group(100)

print (a)
    id name
0  100    A
1  100    B
2  100    C
3  100    D
4  100  pp;

dfg=df.groupby('id',sort=False)
a = dfg.get_group(df.loc[0, 'id'])

print (a)
    id name
0  100    A
1  100    B
2  100    C
3  100    D
4  100  pp;

如果需要枚举组可以使用 GroupBy.ngroup:

dfg=df.groupby('id',sort=False)
a = df[dfg.ngroup() == 0]

print (a)
    id name
0  100    A
1  100    B
2  100    C
3  100    D
4  100  pp;

详情:

print (dfg.ngroup())
0     0
1     0
2     0
3     0
4     0
5     1
6     1
7     1
8     1
9     1
10    1
11    2
dtype: int64

编辑:另一个想法是如果需要 select 按位置分组(所有 id 都是连续的组),并按 id select 的唯一值进行比较按位置:

ids = df['id'].unique()
print (ids)
[100 212 300]

print (df[df['id'].eq(ids[0])])
    id name
0  100    A
1  100    B
2  100    C
3  100    D
4  100  pp;

print (df[df['id'].eq(ids[1])])
     id   name
5   212      E
6   212      F
7   212     ds
8   212      G
9   212   dsds
10  212    sas