У меня есть фрейм данных с мультииндексированными столбцами, которые я хотел бы сгруппировать по уровню 0 и 1. Дублированные столбцы имеют значения, которые я хотел бы суммировать. Как я могу сгруппировать, не опуская другой уровень? Это то, что я пробовал, но он удаляет один из уровней.
Уровень 0 сбрасывается.
data.groupby(level=1, axis=1).sum()
Index(['last', 'quoteVolume'], dtype='object')
1 уровень сброшен.
data.groupby(level=0, axis=1).sum()
Index(['ACA', 'DOT', 'KSM', 'MOVR'], dtype='object')
Столбцы:
MultiIndex([( 'last', 'DOT'),
('quoteVolume', 'DOT'),
( 'last', 'DOT'),
('quoteVolume', 'DOT'),
( 'last', 'KSM'),
('quoteVolume', 'KSM'),
( 'last', 'KSM'),
('quoteVolume', 'KSM'),
( 'last', 'MOVR'),
('quoteVolume', 'MOVR'),
( 'last', 'MOVR'),
('quoteVolume', 'MOVR'),
( 'last', 'ACA'),
('quoteVolume', 'ACA')],
)
Как я могу это сделать ?
Ожидаемый результат:
MultiIndex([( 'last', 'DOT'),
('quoteVolume', 'DOT'),
( 'last', 'KSM'),
('quoteVolume', 'KSM'),
( 'last', 'MOVR'),
('quoteVolume', 'MOVR'),
( 'last', 'ACA'),
('quoteVolume', 'ACA')],
)
Я включил ожидаемый результат, спасибо
Ваш ожидаемый результат выглядит так, будто вы почти хотите просто удалить повторяющиеся индексы столбцов.,. но ваши groupby
примеры, кажется, указывают на то, что у вас есть дублированные столбцы, но также и значения, которые вы хотите суммировать...?
@JonClements да, повторяющиеся столбцы имеют значения, которые должны быть суммированы
вы можете использовать это, использовать ту же группу и установить столбцы позже, используя pd.MultiIndex.from_tuples
out = df.groupby(df.columns,axis=1).sum()
out.columns = pd.MultiIndex.from_tuples(out.columns)
print(out)
level
принимает список в качестве параметра, просто сгруппируйте по [0, 1]
:
df.groupby(level=[0,1], axis=1).sum().sort_index(axis=1, level=1).columns
MultiIndex([( 'last', 'ACA'),
('quoteVolume', 'ACA'),
( 'last', 'DOT'),
('quoteVolume', 'DOT'),
( 'last', 'KSM'),
('quoteVolume', 'KSM'),
( 'last', 'MOVR'),
('quoteVolume', 'MOVR')],
)
Почему-то .sum()
выдает ошибку ValueError: No axis named 1 for object type Series
Интересно, у меня это работает локально, если у вас есть фрейм данных с несколькими индексными столбцами.
Да, у меня есть фрейм данных с несколькими столбцами индекса
Возможно, это несоответствие версии pandas или python. Вот рабочий пример: akuiper.com/console/G4dxfJ8UtRjL
В значениях данных есть nan
, я не знаю, является ли это причиной
пожалуйста, включите образец и ожидаемый результат.