I have multiple dataframes with a structure that starts with 10 and then goes from 0 to 10:
Type Value 10 0.7666 10 0.6566 10 0.7666 0 0.7666 0 0.5446 1 0.7866 2 0.7695 2 0.1642 3 0.1646 ..... 9 0.1476 9 0.4224 10 0.5446 10 0.6566
So far I’ve been using this code to group the dataframe by type:
grouped = df.groupby(['Type']) result = grouped.get_group(10)
It works fine for types 0-9, but I’d also like to split type 10 into 2 groups to distinguish first and last values instead of having it all in a single dataframe like this:
Type Value 10 0.7666 10 0.6566 10 0.7666 10 0.5446 10 0.6566
Advertisement
Answer
Create groups for consecutive groups and then for selecting use tuple:
g = df['Type'].ne(df['Type'].shift()).cumsum() g = g.groupby(df['Type']).rank('dense') grouped = df.groupby(['Type', g]) result = grouped.get_group((10, 1)) print (result) Type Value 0 10 0.7666 1 10 0.6566 2 10 0.7666 result = grouped.get_group((10, 2)) print (result) Type Value 11 10 0.5446 12 10 0.6566