#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