Как переиндексировать «мультигруппированный» фрейм данных? - PullRequest
1 голос
/ 08 мая 2019

У меня есть фрейм данных, содержащий 4 столбца, первые 3 столбца представляют собой числовые переменные, которые указывают на особенность переменной в последнем столбце, а последний столбец - это строки.

Я хочу объединить последний строковый столбец с предыдущими 3 столбцами с помощью функции groupby. Тогда это работает (я имею в виду, что строка, которая имеет ту же функцию, записанную в первых трех столбцах, была успешно объединена)

Ранее длина фрейма данных составляла 1200, а длина объединенного фрейма данных - 1100. Я обнаружил, что более поздний df является мультииндексированным. Которые содержат только 2 столбца. (Иерархический индекс) Таким образом, я попробовал метод переиндексации с помощью сгенерированного возрастающего числового списка. К сожалению, я потерпел неудачу.

df1.columns
*[Out]Index(['time', 'column','author', 'text'], dtype='object')
series = df1.groupby(['time', 'column','author'])
['body_text'].sum()#merge the last column by the first 3 columns
dfx = series.to_frame()# get the new df
dfx.columns
*[Out]Index(['author', 'text'], dtype='object')
len(dfx)
*[Out]1100
indexs = list(range(1100))
dfx.reindex(index = indexs)
*[Out]Exception: cannot handle a non-unique multi-index!

1 Ответ

1 голос
/ 08 мая 2019

Reindex здесь не нужно, лучше использовать DataFrame.reset_index или добавить параметр as_index=False в DataFrame.groupby

 dfx = df1.groupby(['time', 'column','author'])['body_text'].sum().reset_index()

Или:

 dfx = df1.groupby(['time', 'column','author'], as_index=False)['body_text'].sum()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...