#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 |