TGViewer
Мир аналитика данных Мир аналитика данных @analysts_world · 4.56K subscribers
Post #124 2.77K
От меня не убежишь! 😂

Мне в очередной раз нужно было таблицу из плоской сделать сводной. Ведь конечные пользователи любят смотреть именно сводные таблицы, а не обычные в плоском виде, потому что они удобнее для быстрых выводов.
У меня была выгружена табличка с нишами, месяцем и суммой выручки: name, month, amount

df = pd.DataFrame({'name': ['ниша_1', 'ниша_2','ниша_2','ниша_1',None,'ниша_3','ниша_1'],
'month': ['2024-01', '2024-02', '2023-12', '2024-02', '2024-01', '2024-02','2024-01'],
'amount':[ 100, 150, 200, 250, 500, 100,300]})


А я помню, что ниши проставлены не везде и если мы делаем сводную из того, что у нас есть – часть сумм потеряется.
У меня в примере есть в нишах None (там где сумма 500), как будто данных не было.

И из-за этого в сводной получается, что общая сумма таблицы 1100, а не 1600, как должно быть. Кстати, не забываем, что margins=True позволяет увидеть итоговые суммы по столбцам и строкам.

Так вот, сначала нужно заполнить пустоту каким-то названием или нулем хотя бы.
Не забываем приравнять df['name'].fillna('нет ниши') к столбцу df['name'] иначе заполнение не сохранится.
df['name'] = df['name'].fillna('нет ниши')


А теперь можно и сводную строить.
• В параметр index передадим ту колонку, данные которой будут представлены строками сводной таблицы.
• В параметр values мы передаем ту колонку, по которой нам нужно строить сводные данные, применяя агрегирующую функцию сумма.
• В параметр columns передаем колонку, значения которой будут в столбцах.
• В параметр aggfunc передаем агрегирующую функцию (sum. count и пр..)

Другими словами:
В индексы загоняю месяц (month), а в колонки - ниши (columns=['name']). В значения (values) - чем будет заполнена таблица - суммы выручки amount .

Обернем все в скобочки, чтобы перенести код для удобства на новую строку. Можно конечно и обратным слэшем \ воспользоваться, но со () мне больше нравится
(df.pivot_table(index = ['month'], 
columns=['name'],
values = 'amount',
aggfunc = 'sum',margins=True)
.fillna(0)
.reset_index()
)

Вот теперь все по красоте! ✔️🆒

P.S. В эти выходные последнее занятие по питону (заканчивается мой первый поток). ✅
Я сделала в гугл-форме короткую заявку на следующий мартовский поток или если вы хотите позже марта заниматься, то там тоже можно это отметить. Кстати, эти гугл-формы реально очень прикольные и их легко создавать. Я там еще и картинку вставила красивую.
Там можно выбрать нужен ли вам блок только по SQL (4 занятия), блок по Питону(6 занятий) или все вместе.
Ссылка тут - заявка
  • 👏 13
  • 👍 5
  • ❤ 1
More from @analysts_world
  1. Sep 21, 2026📊 Задачка с собеседования Ну что, по итогам голосования большинство хотят задачки и sql.…
  2. Sep 14, 2026Post #345
  3. Sep 14, 2026Что-то я тут прям зачастила с A/B тестами 😅 Смотрю на последние посты и такое чувство, чт…
  4. Sep 1, 2026🎒 С 1 сентября, друзья! Сегодня как раз отправила своих детей в школу – и вот это чувство…
  5. Aug 24, 2026Вне выборки Обычно здесь про SQL, Python и AB-тесты. Но не всё, что важно, попадает в выбо…
  6. Aug 20, 2026Fuckup Night от создателей Trisigma, Ares и karpov.courses Согласитесь, ивенты, где все де…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →