Вот как я мог бы решить проблему с Python, хотя может быть более элегантное решение.
Сначала я хотел бы разобрать значения месяц/год с использованием openpyxl
from openpyxl import load_workbook
wb = load_workbook('data_so.xlsx')
sheet_ranges = wb['Sheet1']
year = str(sheet_ranges['A1'].value)
month = str(sheet_ranges['B1'].value)
Оттуда я найти пакет панд чрезвычайно полезным для типов манипуляций вы требуете, Установка мультииндексы позволяют легко перепрофилирования (через стек).
import pandas as pd
df = pd.read_excel('data_so.xlsx', skiprows=3)
columns = pd.MultiIndex.from_tuples([('A', 'Price'), ('A', 'Quantity'),
('B', 'Price'), ('B', 'Quantity'),
('C', 'Price'), ('C', 'Quantity')],
names=['letters', 'index'])
index = pd.MultiIndex.from_arrays(df.ix[:,:2].values.T,names=('Item', 'Code'))
df2 = pd.DataFrame(df.ix[:,2:].values, columns=columns, index=index)
df3 = df2.stack('letters').reset_index()
Затем мы можем установить месяц и год к значениям, которые мы собрали:
df3['Year'] = year
df3['Month'] = month
Далее можно назвать мультииндексным и складывает, чтобы организовать цену и количество, что вы хотите. Это не совсем чисто, но это решает вашу проблему.
df3.index = pd.MultiIndex.from_arrays(df3[['Item','Code','letters','Year','Month']].values.T,
names=('Item', 'Code','letters','Year','Month'))
df4 = df3[['Price','Quantity']].stack()
df5 = pd.DataFrame(df4)
df5.columns = ['Value']
df5.reset_index()
спасибо! оно работает :) –