Pandas 1.0 создать столбец месяцев от года и даты - PullRequest
0 голосов
/ 09 марта 2020

У меня есть кадр данных df со значениями как:

df.iloc[1:4, 7:9]
    Year  Month
38  2020      4
65  2021      4
92  2022      4

Я пытаюсь создать новый столбец MonthIdx как:

df['MonthIdx'] = pd.to_timedelta(df['Year'], unit='Y') + pd.to_timedelta(df['Month'], unit='M') + pd.to_timedelta(1, unit='D')

Но я получаю ошибку :

ValueError: Units 'M' and 'Y' are no longer supported, as they do not represent unambiguous timedelta values durations.

Следующий желаемый результат:

df['MonthIdx']
    MonthIdx
38  2020/04/01
65  2021/04/01
92  2022/04/01

1 Ответ

0 голосов
/ 09 марта 2020

Таким образом, вы можете заполнить значение месяца в серии, а затем переформатировать, чтобы получить дату и время для всех значений:

month = df.Month.astype(str).str.pad(width=2, side='left', fillchar='0')
df['MonthIdx'] = pd.to_datetime(pd.Series([int('%d%s' % (x,y)) for x,y in zip(df['Year'],month)]),format='%Y%m')

Это даст вам:

   Year  Month   MonthIdx
0  2020      4 2020-04-01
1  2021      4 2021-04-01
2  2022      4 2022-04-01

Вы можете переформатировать дату так, чтобы она соответствовала вашему формату:

df['MonthIdx'] = df['MonthIdx'].apply(lambda x: x.strftime('%Y/%m/%d'))

Даю вам:

   Year  Month    MonthIdx
0  2020      4  2020/04/01
1  2021      4  2021/04/01
2  2022      4  2022/04/01
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...