Groupby Sum и Flatten Multi-Row Index DataFrame

У меня есть вопрос, который я считаю очень тривиальным, но я ищу лучший способ кодирования, чем то, что я считаю возможным.

У меня есть следующий фрейм данных:

Индекс 1Индекс 2Индекс 3Ценность
Аа1а111
Аа1а121
Аа2а211
Бб1б111
Сс1с111
Сс2с211

Я хочу показать все результаты groupby и сгладить фрейм данных, чтобы он выглядел так:

ПоказательЦенность
А3
а12
а111
а121
Б1
б11
б111
С2
с11
с111
с21
с211

Я могу добиться этого, используя несколько групп в отдельном столбце Index X, а затем сопоставляя результаты в последовательном порядке, но я ищу более pythonic/эффективную операцию pandas, которая возможна, но я не знаю!

Спасибо!

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
24
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, что вы можете просто сделать stack и value_counts:

index_cols = df.filter(like='Index ').columns
flattened_series = df[index_cols].stack().value_counts(sort=False)

Выход:

>>> flattened_series
A      3
a1     2
C      2
a11    1
a12    1
a2     1
a21    1
B      1
b1     1
b11    1
c1     1
c11    1
c2     1
c21    1
dtype: int64

Это просто подсчитывает значения столбцов индекса; на самом деле он не суммирует значения столбца Value. Выполнение тот также было бы довольно простым:

flattened_summed_series = df.set_index('Value').stack().reset_index(level=0).groupby(0, sort=False)['Value'].sum().rename_axis(None)

Выход:

>>> flattened_summed_series
A      3
a1     2
a11    1
a12    1
a2     1
a21    1
B      1
b1     1
b11    1
C      2
c1     1
c11    1
c2     1
c21    1
Name: Value, dtype: int64

Другие вопросы по теме