Shew
Shew

Reputation: 1596

Getting groups by group index

I want to access the group by group index. My dataframe is as given below

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))

I want to groupby 'id' and access the groups by its group index.

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

I was expecting this to return the first group which is the group for id =1 (which is the first group)

Upvotes: 0

Views: 335

Answers (1)

jezrael
jezrael

Reputation: 862851

You need pass value of 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;

If need enumerate groups is possible use 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;

Detail:

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

EDIT: Another idea is if need select groups by positions (all id are consecutive groups) with compare by unique values of id selected by positions:

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

Upvotes: 1

Related Questions