使用month_year将对象转换为该月的最后日期
如何生成一个新列,其月份的最后日期为month_year? Month_year是一个对象,我无法在python中将其转换为日期格式。我希望最后一个日期采用日期格式,以便我可以计算与数据中其他可用日期列的差异。
数据如下:
id month_date
id_1 04-2018
id_1 04-2018
id_2 04-2018
id_2 05-2019
所需的输出:
id month_date last_date
id_1 04-2018 30-4-2018
id_1 04-2018 30-4-2018
id_2 04-2018 30-4-2018
id_2 05-2019 31-5-2019
答案 0 :(得分:0)
使用Series.to_timestamp
和Series.dt.floor
来删除时间:
df['last_date'] = df['month_date'].dt.to_timestamp(how='end').dt.floor('d')
print (df)
id month_date last_date
0 id_1 2018-04 2018-04-30
1 id_1 2018-04 2018-04-30
2 id_2 2018-04 2018-04-30
3 id_2 2019-05 2019-05-31
另一种解决方案:
df['last_date'] = df['month_date'].dt.to_timestamp() + pd.offsets.MonthEnd()
print (df)
id month_date last_date
0 id_1 2018-04 2018-04-30
1 id_1 2018-04 2018-04-30
2 id_2 2018-04 2018-04-30
3 id_2 2019-05 2019-05-31
编辑:
另一种解决方案:
df['last_date1'] = pd.PeriodIndex(df['month_date']).to_timestamp(how='end').floor('d')
df['last_date2'] = pd.PeriodIndex(df['month_date']).to_timestamp() + pd.offsets.MonthEnd()
print (df)
id month_date last_date1 last_date2
0 id_1 2018-04 2018-04-30 2018-04-30
1 id_1 2018-04 2018-04-30 2018-04-30
2 id_2 2018-04 2018-04-30 2018-04-30
3 id_2 2019-05 2019-05-31 2019-05-31
答案 1 :(得分:0)
请在日期的第一天添加日期部分。像Jan-2019将是01-Jan-2019,然后使用datetime.timedelta,添加一个月并减去1天。
答案 2 :(得分:0)
使用MonthEnd
例如:
from pandas.tseries.offsets import MonthEnd
df = pd.DataFrame({"month_date": ["04-2018", "04-2018", "04-2018", "05-2019"]})
df["month_date"] = pd.to_datetime(df["month_date"], format="%m-%Y")
df["last_date"] = (df["month_date"] + MonthEnd(1)).dt.strftime("%d-%m-%Y")
df["month_date"] = df["month_date"].dt.strftime("%m-%Y")
print(df)
输出:
month_date last_date
0 04-2018 30-04-2018
1 04-2018 30-04-2018
2 04-2018 30-04-2018
3 05-2019 31-05-2019