#python #pandas
Вопрос:
Я читаю данные из файла .csv, который выводится в таблицу, как показано ниже.
Имя | R0 | Комната | R1 |
---|---|---|---|
A | 1 | 1 | 3 |
B | 5 | 1 | 1 |
C | 3 | 7 | 10 |
D | 4 | 8 | 12 |
Я хочу последовательно просмотреть конкретные столбцы каждой строки во фрейме данных, и если начальное значение Rm эквивалентно Rm следующей строки, то я объединю 2 строки, сохраняя значения, как показано ниже, обратите внимание, что это образец фрейма данных, который я использую, данные, с которыми я работаю, содержат больше строк и столбцов, и я буду использовать этот метод для нескольких столбцов. Мне удалось сделать это для одной строки, но я не смог пройти по каждой строке, сравнивая и объединяя.
Имя | R0 | Комната | R1 |
---|---|---|---|
A,B | 5 | 1 | 3 |
C | 3 | 7 | 10 |
D | 4 | 8 | 12 |
Теперь, когда я использую это в своей программе, должен ли я попытаться заставить оба условия столбца работать одновременно или мне следует выполнить цикл по данным один раз для каждого набора условий?
Ответ №1:
Вы должны избегать повторения строк, это медленно.
Вместо этого вы могли бы использовать groupby
и agg
:
(df.groupby(df['Rm'].ne(df['Rm'].shift()).cumsum(), as_index=False)
.agg({'Name': ','.join, 'R0':'max', 'Rm': 'first', 'R1': 'max'})
)
Выход:
Name R0 Rm R1
0 A,B 5 1 3
1 C 3 7 10
2 D 4 8 12