【问题标题】:resolve the last day of the month python [duplicate]解决本月的最后一天python [重复]
【发布时间】:2021-12-24 00:22:38
【问题描述】:

我在 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

有没有什么办法可以转转?可以用其他方式

【问题讨论】:

标签: python pandas datetime


【解决方案1】:

使用这个:

import pandas as pd
from pandas.tseries.offsets import BMonthEnd
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['DATA2'] = pd.to_datetime(df['DATA']) + BMonthEnd(0)
print(df)

输出:

          DATA      DATA2
0   2021-10-06 2021-10-29
1   2021-10-05 2021-10-29
2   2021-10-04 2021-10-29
3   2021-10-01 2021-10-29
4   2021-09-30 2021-09-30
5  2021-09-29  2021-09-30
6   2021-09-28 2021-09-30
7  2021-09-27  2021-09-30

【讨论】:

    【解决方案2】:

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

    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')
    

    【讨论】:

    • 这不是错误。所有“结束”偏移量(MonthEnd/BMonthEnd etc)都以这种方式运行。您可以通过显式使用 (0) 来避免这种行为,这将持续到 当前月份 的末尾,即使它是最后一天。 df['DATA2'] = pd.to_datetime(df['DATA']) + BMonthEnd(0)This answer Martien LubberinkMonthEnd 解释了这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 2019-06-15
    • 2013-11-25
    • 1970-01-01
    • 2013-04-27
    • 2019-06-16
    相关资源
    最近更新 更多