Панды разделяют группу на первое и последнее значения

#python #pandas

#python #pandas

Вопрос:

У меня есть несколько фреймов данных со структурой, которая начинается с 10, а затем переходит от 0 к 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
 

До сих пор я использовал этот код для группировки фрейма данных по типу:

 grouped = df.groupby(['Type'])
result = grouped.get_group(10)
 

Это отлично работает для типов 0-9, но я бы также хотел разделить тип 10 на 2 группы, чтобы различать первое и последнее значения, вместо того, чтобы иметь все это в одном фрейме данных, подобном этому:

 Type  Value
 10  0.7666
 10  0.6566
 10  0.7666
 10  0.5446
 10  0.6566
 

Ответ №1:

Создайте группы для последовательных групп, а затем для выбора используйте кортеж:

 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