Как отключить несколько столбцов и динамически называть месяцы в Python? - PullRequest
0 голосов
/ 12 апреля 2019

Мне нужна помощь в преобразовании нескольких столбцов в отдельные наблюдения.В прошлый раз с вашей помощью я пытался преобразовать столбцы спроса, теперь мне нужно добавить больше столбцов, таких как столбцы «Задания» и «PO 12» для каждого, и хочу преобразовать их как три отдельных наблюдения, а затем вычислить столбец «Будущее бесплатно» (Future Free = Max (Job), PO) -Demand)

from sqlalchemy import create_engine
import pandas as pd
import matplotlib.pyplot as plt
import datetime as dt
import calendar 
from pandas.tseries.offsets import MonthEnd 
engine = create_engine('mssql+pyodbc://server/driver=SQL+Server')
con=engine.connect()
rs=con.execute("""Select StockCode, Demand00, Demand01, Demand02, 
Demand03, Demand04, Demand05, Demand06, Demand07, Demand08, Demand09, 
Demand10, Demand11 from ForecastData""")
df= pd.DataFrame(rs.fetchall())
df.columns = ["StockCode", "Demand01","Demand02", "Demand03", "Demand04", 
"Demand05", "Demand06","Demand07", "Demand08", "Demand09", "Demand10", 
"Demand11", "Demand12"]
df.set_index('StockCode')
demand_columns=[i for i in df.columns if i.startswith('Demand')]
today=pd.Timestamp.now()
month_list=[(today+pd.DateOffset(months=i)) for i in 
range(len(demand_columns))]
dic_month={col:month for col,month in zip(demand_columns,month_list)}
df.rename(columns=dic_month) 
df2=pd.DataFrame(df.rename(columns=dict(zip(demand_columns,month_list))).set_ 
index('StockCode').stack()).reset_index()
df2.columns = ['StockCode', 'Month', 'Value']
df2['Month'] = pd.to_datetime(df2['Month'], format = '%Y%m').dt.date

Предыдущий вывод

StockCode     Month     Value
ABC       2019-01-01    100
ABC       2019-02-01    80
BXY       2019-01-01    50

Желаемый вывод

StockCode Month  Demand Job  PO FutureFree
ABC       January  100   120 0  20
ABC       February 120   80  0  0
BXY       January  50    00 60  10
...