首页 > 解决方案 > 解决当月的最后一天python

问题描述

我在 df 中的 DATA 中有一个列,我需要从中创建一个新列来提取该月的最后一个工作日或该特定月份的该月的最后一天。

df = pd.DataFrame({
           'DATA':['2021-10-06','2021-10-05','2021-10-04','2021-10-01','2021-09-30','2021-09-29 ','2021-09-28','2021-09-27 ']               
          })
print(df)

我设法在 BMonthEnd() 的帮助下做到了这一点。

df['DATA2'] = pd.to_datetime(df['DATA']) + BMonthEnd()

但是当我在给定月份的最后一个工作日到达时,它会跳到下个月。

可以使用一种方法来使用该月的最后一个日期。

例如使用 BMonthEnd()

   DATA        DATA2
2021-10-06  2021-10-29
2021-10-05  2021-10-29
2021-10-04  2021-10-29
2021-10-01  2021-10-29
2021-09-30  2021-10-29  ** Erro, Correct = 2021-09-30
2021-09-29  2021-09-30
2021-09-28  2021-09-30
2021-09-27  2021-09-30

有什么办法可以reolver?可以使用另一种方式

标签: pythonpandasdatetime

解决方案


您必须解决看起来像错误的问题,这很糟糕,但是您可以手动捕获日期并在当月加入。

import pandas as pd
df = pd.DataFrame({
           'DATA':['2021-10-06','2021-10-05','2021-10-04','2021-10-01','2021-09-30','2021-09-29','2021-09-28','2021-09-27 ']               
          })
df['m'] = pd.to_datetime(df['DATA']).dt.month

eom=pd.date_range('1/1/2021', periods=12, freq='BM').to_frame(name='DATA2')
eom['m'] = eom['DATA2'].dt.month
df.merge(eom, on='m').drop(columns='m')

推荐阅读