#python #arrays
#python #массивы
Вопрос:
Мне нужна помощь в преобразовании столбцов в строки и динамическом присвоении столбцам имен по месяцам.
Пожалуйста, посмотрите прикрепленное изображение raw_data
Например: допустим, текущий месяц — март, название месяца Demand00 будет March, Demand01 будет April и так далее. Если я запущу этот же код в апреле, имя столбца Demand00 должно быть названо April, а Demand01 — May и так далее.
Это мой первый пост, надеюсь, я дал вам необходимую информацию для обращения за помощью, если я что-то пропустил, пожалуйста, дайте мне знать.
Заранее благодарю вас за вашу помощь.
Комментарии:
1. Можете ли вы опубликовать свои данные в виде текста, а не изображения?
Ответ №1:
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']
Комментарии:
1. Спасибо, Серж. В строке «месяцы» произошла ошибка. Но вторая часть вашего кода помогла мне открепить данные. Возможно, я что-то пропустил здесь, но огромное спасибо.
Ответ №2:
Это должно сделать:
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 создает список месяцев от сегодняшнего месяца до месяца вашего последнего столбца и преобразует month в виде целого числа в его название месяца
Строка 4 сопоставляет столбцы месяцам
Строка 5 переименовывает ваши столбцы.
Редактировать: добавлен ответ с названием месяца вместо числа
Комментарии:
1. Спасибо, Хуан, твой код помог мне динамически переименовывать столбцы по названию месяца.