Как создать таблицу фактов с помощью python в проекте ETL

#python #pandas #dataframe #schema #etl

Вопрос:

Мне нужно создать таблицу фактов в новом проекте с использованием python. Может ли кто-нибудь помочь мне создать нижеприведенную структуру. Первая таблица-это моя входная транзакционная таблица —

Идентификатор заказа Дата Заказа Регион Продажи Прибыль Количество
CA-2013-152156 09-11-2014 00:00:00 Восток 261.96 41.9136 9
Калифорния-2013-138688 2014-06-13 00:00:00 Запад 14.62 6.8714 2
США-2012-108966 2013-10-11 00:00:00 Юг 957.5775 -383.031 5
CA-2011-115812 2012-06-09 00:00:00 Запад 48.86 14.1694 7

Результат будет аналогичен приведенной ниже таблице . В принципе, мне нужно создать таблицу фактов с двумя новыми столбцами -1) Мера и 2)Значения . Столбцы продаж, прибыли и количества необходимо перенести во вторую таблицу вместе с другими столбцами атрибутов.

Идентификатор заказа Дата Заказа Регион Мера Ценность
CA-2013-152156 2014-11-09 00:00:00 Юг Продажи 261.96
CA-2013-152156 2014-11-09 00:00:00 Юг Прибыль 41.9136
CA-2013-152156 2014-11-09 00:00:00 Юг Количество 2
Калифорния-2013-138688 2014-06-13 00:00:00 Запад Продажи 14.62
Калифорния-2013-138688 2014-06-13 00:00:00 Запад Прибыль 6.8714
Калифорния-2013-138688 2014-06-13 00:00:00 Запад Количество 2
США-2012-108966 2013-10-11 00:00:00 Юг Продажи 957.5775
США-2012-108966 2013-10-11 00:00:00 Юг Прибыль -383.031
США-2012-108966 2013-10-11 00:00:00 Юг Количество 5

Я использовал небольшой фрейм данных из примера данных супермаркета для примера.

Комментарии:

1. Не могли бы вы отредактировать свой вопрос и поместить фреймы данных в текстовую форму? Чтобы мы могли скопировать и вставить его?

2. Я не понимаю, что требуется для вывода. Ты должен это объяснить.

3. ожидаемый результат выглядит так, как будто он был создан с groupby([id, date, region]) sum() sales,profit помощью и при последующем использовании pivot

4. Я отредактировал таблицы. может ли кто — нибудь направлять меня. Опция Группировать по не работает должным образом.

Ответ №1:

  • ваши примерные данные не соответствуют вашим желаемым выводам ….
  • это простой случай groupby() всех столбцов, кроме значения
  • затем unstack("measure")
 import io
import pandas as pd


df = pd.DataFrame({'Order ID': ['CA-2013-152156',
  'CA-2013-152156',
  'CA-2013-152156',
  'CA-2013-138688',
  'CA-2013-138688',
  'CA-2013-138688',
  'US-2012-108966',
  'US-2012-108966',
  'US-2012-108966'],
 'Order Date': ['2014-11-09 00:00:00',
  '2014-11-09 00:00:00',
  '2014-11-09 00:00:00',
  '2014-06-13 00:00:00',
  '2014-06-13 00:00:00',
  '2014-06-13 00:00:00',
  '2013-10-11 00:00:00',
  '2013-10-11 00:00:00',
  '2013-10-11 00:00:00'],
 'Region': ['South',
  'South',
  'South',
  'West',
  'West',
  'West',
  'South',
  'South',
  'South'],
 'Measure': ['Sales',
  'Profit',
  'Quantity',
  'Sales',
  'Profit',
  'Quantity',
  'Sales',
  'Profit',
  'Quantity'],
 'Value': [261.96, 41.9136, 2.0, 14.62, 6.8714, 2.0, 957.5775, -383.031, 5.0]})

df.groupby([c for c in df.columns if c!="Value"]).sum().unstack("Measure").droplevel(0,1).reset_index()


 
Идентификатор заказа Дата Заказа Регион Прибыль Количество Продажи
0 Калифорния-2013-138688 2014-06-13 00:00:00 Запад 6.8714 2 14.62
1 CA-2013-152156 2014-11-09 00:00:00 Юг 41.9136 2 261.96
2 США-2012-108966 2013-10-11 00:00:00 Юг -383.031 5 957.577