reset_index () в исходные индексы столбцов после группы pandas ()?

Я создаю сгруппированный кадр данных df = df.groupby(['X','Y']).max(), который затем хочу записать (в csv, без индексов). Поэтому мне нужно преобразовать «X» и «Y» обратно в обычные столбцы; Я пытался использовать reset_index(), но порядок столбцов был неправильным.

Как восстановить столбцы "X" и "Y" в точное исходное положение?

Является ли решение:

df.reset_index(level=0, inplace=True)

а затем найти способ изменить порядок столбцов?


(Я также нашел этот подход для мультииндекса)


person bkd    schedule 26.01.2016    source источник
comment
FutureWarning происходит от lambda x: x == x.max()? Если вам нужно, чтобы это была проверка личности, вероятно, вы можете использовать lambda x: x is x.max().   -  person Paul    schedule 27.01.2016
comment
Это работает? outputframe.groupby(['somecol','someothercol'],as_index=False).max()   -  person maxymoo    schedule 27.01.2016
comment
Я вообще не понял вашего вопроса. Вы хотите удалить NaN значений из столбцов, удалив строки? Или вы хотите объединить строки вместе в одну строку?   -  person Kartik    schedule 27.01.2016
comment
@Kartik В таблице с неполными строками есть полудубликаты. Если две строки совпадают в паре указанных столбцов, они считаются дубликатами. Затем я хочу, чтобы эти две строки были объединены в одну строку, сохраняя/объединяя как можно больше информации. Во многих случаях есть дополнительные столбцы, в которых одна строка имеет строковое значение, а другая — nan, и затем я хочу, чтобы строковое значение присутствовало в объединенной строке.   -  person bkd    schedule 28.01.2016
comment
Я тоже совершенно не понимаю вашего вопроса и не вижу, откуда взялись 'somecol', 'someothercol'. Учитывая, что первая часть (объединение нескольких строк) решена и не является проблемой, удалите все ссылки на нее и покажите нам 'somecol', 'someothercol' в строке 1. Или любую другую начальную точку, которая вам нужна, чтобы сделать это MCVE. В противном случае никто другой не сможет понять или повторно использовать этот вопрос.   -  person smci    schedule 19.07.2019
comment
Например, почему вы не можете просто позвонить 'somecol','someothercol' 'X','Y' вместо этого? На порядок чище. Кроме того, я удалил ненужную преамбулу о том, откуда взялся df (объединение неполных/рваных строк). Пока вы это делаете, вы также можете переименовать outputframe в df. (ОБНОВЛЕНИЕ: я просто сделал это для ясности)   -  person smci    schedule 19.07.2019
comment
Просто используйте reset_index(), а затем измените порядок столбцов, например. [2,0,1] или что-то еще   -  person smci    schedule 19.07.2019
comment
Поэтому я удалил все ненужные обсуждения ответа, который вы связали, FutureWarning, я даже не понимаю, как вы можете сравнивать нечисловые числа с .transform(lambda x: x == x.max()).astype(bool)]   -  person smci    schedule 19.07.2019


Ответы (1)


Это решение сохраняет столбцы как есть и не создает индексы после группировки, поэтому нам не нужны reset_index() и переупорядочивание столбцов в конце:

df.groupby(['X','Y'],as_index=False).max()

(После тестирования множества различных методов самый простой оказался лучшим решением (как всегда) и тот, который ускользал от меня дольше всего. Спасибо @maxymoo за указание на это.)

person bkd    schedule 28.01.2016