[英]How to unpivot columns in pandas and name the months dynamically?
我需要一些幫助來將列轉換為行並按月動態命名列。
請參閱隨附的raw_data 圖像
例如:假設當前月份是三月,Demand00 月份名稱將是三月,Demand01 將是四月等等。 如果我在 4 月運行相同的代碼,Demand00 列名稱應命名為 April,Demand01 應命名為 May,依此類推。
這是我的第一篇文章,我希望我給了你相關的信息來尋求幫助,如果我遺漏了什么,請告訴我。
預先感謝您的幫助。
這應該做:
import datetime as dt
import calendar
this_month=dt.datetime.now().month
demand_columns=[i for i in df.columns if 'Demand' in i]
month_list=[calendar.month_name[this_month+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)
第 1 行提取當前月份
第 2 行提取名稱中包含“需求”的每一列
第 3 行創建從今天的月份到最后一列月份的月份列表,並將月份作為整數轉換為其月份名稱
第 4 行將列映射到月份
第 5 行重命名您的列。
編輯:添加了帶有月份名稱而不是數字的答案
pd.DateOffset
很適合計算pd.DateOffset
, stack
可以將列轉換為行。
所以代碼可能是:
# compute month names:
cols = [x for x in df.columns if x.startswith('Demand')]
today = pd.Timestamp.now()
months=[(today+pd.DateOffset(months=i)).month_name()
for i in range(len(cols))]
# rename columns and stack:
df2 = pd.DataFrame(df.rename(columns=dict(zip(cols, months)))
.set_index('StockCode').stack()).reset_index()
df2.columns = ['StockCode', 'Month', 'Value']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.