如何取消转折熊猫列并动态命名月份?

时间:2019-03-20 21:33:08

标签: python arrays

在将列转换为行并按月动态命名列时,我需要一些帮助。

请参阅附件的raw_data image

例如:假设当前月份为3月,Demand00月名称为3月,Demand01为4月,依此类推。如果我在4月运行相同的代码,Demand00列名称应命名为April,Demand01列应命名为May,依此类推。

这是我的第一篇文章,希望我给您有关信息以寻求帮助,如果我错过了任何事情,请告诉我。

预先感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

这应该做:

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行提取名称中带有“ Demand”的每一列

第3行创建从今天月份到最后一列月份的月份列表,并将月份作为整数转换为月份名称

第4行将列映射到月份

第5行重命名您的列。

编辑:添加的答案是月份名称而不是数字

答案 1 :(得分:0)

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']