繁体   English   中英

在python中从month -year生成每月的最后一天

[英]generate last day of the month from month -year in python

使用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

使用Series.to_timestampSeries.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号。 像Jan-2019将是01-Jan-2019,然后使用datetime.timedelta,添加一个月并减去1天。

使用月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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM