В Python с использованием Pandas объединяйте строки, когда значение номера одного столбца находится между значениями дву ⇐ Python
-
Anonymous
В Python с использованием Pandas объединяйте строки, когда значение номера одного столбца находится между значениями дву
У меня текущая проблема. У меня есть следующий фрейм данных:
Код_страны страна low_range high_range -------------------------------------------------- --- Австралия Австралия 1 10 ФР Франция 2 40 ФР Франция 4 60 Австралия Австралия 11 23 Австралия Австралия 21 23 Австралия Австралия 30 43 Австралия Австралия 43 55 ФР Франция 46 55 ФР Франция 67 80 ФР Франция 81 98 Я хотел бы получить такой результат:
Код_страны страна low_range high_range -------------------------------------------------- --- Австралия Австралия 1 23 ФР Франция 2 60 Австралия Австралия 30 55 ФР Франция 67 98 чтобы все эти строки были объединены в одну:
Код_страны страна low_range high_range -------------------------------------------------- --- ФР Франция 2 40 ФР Франция 4 60 ФР Франция 46 55 -------------------------------------------------- --- ФР Франция 2 60 -------------------------------------------------- --- -------------------------------------------------- --- ФР Франция 67 80 ФР Франция 81 98 -------------------------------------------------- --- ФР Франция 67 98 -------------------------------------------------- --- -------------------------------------------------- --- Австралия Австралия 1 10 Австралия Австралия 11 23 Австралия Австралия 21 23 -------------------------------------------------- --- Австралия Австралия 1 23 -------------------------------------------------- --- -------------------------------------------------- --- Австралия Австралия 30 43 Австралия Австралия 43 55 -------------------------------------------------- --- Австралия Австралия 30 55 Как объединить строки с одинаковым кодом страны или страны, чтобы получить строку с диапазоном от наименьшего номера диапазона до самого высокого номера диапазона? Но только если все объединенные строки имеют номер в конечном диапазоне строк?
Обратите внимание, что мой фрейм данных уже упорядочен по значениям low_number.
Мой уровень в Pandas низкий. Однако я уже группирую по странам:
countriesGroup = df.groupby(['country'], as_index=False) Затем я безуспешно попытался сгруппировать по одной конкретной стране, используя условие:
france =countriesGroup.get_group('Франция') france.groupby(france['high_range'] == france['low_range'].shift(1) + 1).agg( { 'high_range': max, 'low_range': min}) Я не знаю, как сохранить все остальные столбцы, заменяя значение low_range минимальным значением и high_range высоким значением с помощью agg или любой другой функции.
Я уже задавал аналогичный вопрос, но речь шла только о том, чтобы объединить строку с тем же low_range, что и следующая строка high_range. Ответ был:
df.rename(columns={"high_range":"key"}).merge(df.rename(columns{"low_range":"key"})).drop(columns="key") Это идеально подходит для моего предыдущего варианта использования, но я не понимаю, как можно адаптировать его к новому.
Заранее спасибо!
У меня текущая проблема. У меня есть следующий фрейм данных:
Код_страны страна low_range high_range -------------------------------------------------- --- Австралия Австралия 1 10 ФР Франция 2 40 ФР Франция 4 60 Австралия Австралия 11 23 Австралия Австралия 21 23 Австралия Австралия 30 43 Австралия Австралия 43 55 ФР Франция 46 55 ФР Франция 67 80 ФР Франция 81 98 Я хотел бы получить такой результат:
Код_страны страна low_range high_range -------------------------------------------------- --- Австралия Австралия 1 23 ФР Франция 2 60 Австралия Австралия 30 55 ФР Франция 67 98 чтобы все эти строки были объединены в одну:
Код_страны страна low_range high_range -------------------------------------------------- --- ФР Франция 2 40 ФР Франция 4 60 ФР Франция 46 55 -------------------------------------------------- --- ФР Франция 2 60 -------------------------------------------------- --- -------------------------------------------------- --- ФР Франция 67 80 ФР Франция 81 98 -------------------------------------------------- --- ФР Франция 67 98 -------------------------------------------------- --- -------------------------------------------------- --- Австралия Австралия 1 10 Австралия Австралия 11 23 Австралия Австралия 21 23 -------------------------------------------------- --- Австралия Австралия 1 23 -------------------------------------------------- --- -------------------------------------------------- --- Австралия Австралия 30 43 Австралия Австралия 43 55 -------------------------------------------------- --- Австралия Австралия 30 55 Как объединить строки с одинаковым кодом страны или страны, чтобы получить строку с диапазоном от наименьшего номера диапазона до самого высокого номера диапазона? Но только если все объединенные строки имеют номер в конечном диапазоне строк?
Обратите внимание, что мой фрейм данных уже упорядочен по значениям low_number.
Мой уровень в Pandas низкий. Однако я уже группирую по странам:
countriesGroup = df.groupby(['country'], as_index=False) Затем я безуспешно попытался сгруппировать по одной конкретной стране, используя условие:
france =countriesGroup.get_group('Франция') france.groupby(france['high_range'] == france['low_range'].shift(1) + 1).agg( { 'high_range': max, 'low_range': min}) Я не знаю, как сохранить все остальные столбцы, заменяя значение low_range минимальным значением и high_range высоким значением с помощью agg или любой другой функции.
Я уже задавал аналогичный вопрос, но речь шла только о том, чтобы объединить строку с тем же low_range, что и следующая строка high_range. Ответ был:
df.rename(columns={"high_range":"key"}).merge(df.rename(columns{"low_range":"key"})).drop(columns="key") Это идеально подходит для моего предыдущего варианта использования, но я не понимаю, как можно адаптировать его к новому.
Заранее спасибо!
Мобильная версия