TGViewer
Мир аналитика данных Мир аналитика данных @analysts_world · 4.56K subscribers
Post #295 2.34K
🧩 Когда хочется угодить заказчику или лайфхак в Python для.. Excel

Неожиданно, правда? Недавно столкнулась с такой потребностью по работе: нужно было собрать всё про клиента в одной строке - заказы, статусы, комментарии - чтобы не плодить дубли.

Классика разговора:
- А такое можете?
- Могём!

Короче можно сделать аккуратно и компактно, всё в одной строке! 👇

Создадим датафреймчик
import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import Alignment

df = pd.DataFrame({
'client_id': [1, 1, 1, 2, 2],
'order_id': [101, 102, 103, 201, 202],
'comment': ['срочная доставка', 'оплата картой', 'повторный заказ', 'новый клиент', 'скидка 10%']
})


Теперь объединим данные по клиенту. И вот тут используем переносы строк внутри ячейки \n. Но в юпитере их видно не будет. Смотрите на фото как выглядит в Юпитере. Строка будет типа такой: срочная доставка\nоплата картой\nповторный заказ
df_grouped = df.groupby('client_id', as_index=False).agg({
'order_id': lambda x: '\n'.join(map(str, x)),
'comment': lambda x: '\n'.join(x)
})


💡Теперь само волшебство:
file = 'clients_info.xlsx'

#Сохраняем в Excel
df_grouped.to_excel(file, index=False, engine='openpyxl')

# ✨ Делаем переносы видимыми в Excel
wb = load_workbook(file) # открываем созданный файл Excel
ws = wb.active # выбираем активный лист

# пропускаем заголовок,проходит по всем ячейкам.
for row in ws.iter_rows(min_row=2, max_row=ws.max_row):
for cell in row:
# Если в ячейке есть текст с переносами — включаем wrapText
if isinstance(cell.value, str) and '\n' in cell.value:
cell.alignment = Alignment(wrapText=True)

wb.save(file) # сохраняем файл счастья


😀 Excel покажет всё в столбик прямо внутри ячейки, аккуратно и читаемо!

Лайк за пост в рабочий субботний день! 🤪 Кто осилил - тот молодец!
  • 👍 24
  • ❤ 19
  • ❤‍🔥 3
  • 🔥 3
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 →