为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas 在计算相应的最后一个工作日时更改月份

Pandas 在计算相应的最后一个工作日时更改月份

BIG阳 2023-07-11 15:09:26
在下面的pandas数据框示例中,MyDate由该月的第一天和该月的最后一个 工作日组成。数据集将始终运行到 1st (current month - 1)。我想将 MyDate 动态增加一个月。然而,这样做后,最后一个工作日就不再是正确的了。因此,我还想根据更新的月份计算最后一个工作日。输入:MyDate       MyValue 31/Mar/2020  001/Apr/2020  a30/Apr/2020  b01/May/2020  c29/May/2020  d <<< note 29 May - last workday of month01/Jun/2020  e30/Jun/2020  f01/Jul/2020  g31/Jul/2020  h01/Aug/2020  i期望的输出:MyDate       MyValue 30/Apr/2020  001/May/2020  a29/May/2020  b <<< note 29 May - last workday of month01/Jun/2020  c30/Jun/2020  d 01/Jul/2020  e31/Jul/2020  f01/Aug/2020  g31/Aug/2020  h01/Sep/2020  i我将问题分为两部分:更改month为month+1- 使用relativedelta获取更改月份的最后一个工作日 - 使用pd.offsets.BMonthEnd(),但不知怎的,尽管我尝试了在 stackoverflow 上发布的类似解决方案,但我还是陷入了#2。这是我的代码:import pandas as pdfrom dateutil.relativedelta import relativedelta...# this solves part #1df['MyDate']=df['MyDate'].dt.date + relativedelta(months=+1)# attempt at solving part 2df['MyDate']=pd.to_datetime(df['MyDate'])mask = df['MyDate'].dt.day > 1df.loc[mask, 'MyDate'] = df['MyDate'] + pd.offsets.BMonthEnd(1)最后一行是我被困住的地方;显然它不会产生我认为会产生的结果......任何解决此问题的帮助,或解决整个问题的不同“熊猫式”方法,将不胜感激。
查看完整描述

1 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

您可以创建一个布尔掩码来标识列中的业务月末日期MyDate(业务月末日期返回True,其他返回False)。使用此掩码分别添加 1 个月初和 1 个营业月末


m = df.MyDate == (df.MyDate + pd.offsets.BMonthEnd(0))

df.loc[m, 'MyDate']  = df.loc[m, 'MyDate'] +  pd.offsets.BMonthEnd(1)

df.loc[~m, 'MyDate'] = df.loc[~m, 'MyDate'] +  pd.offsets.MonthBegin(1)


print(df)


Output:

      MyDate MyValue

0 2020-04-30       0

1 2020-05-01       a

2 2020-05-29       b

3 2020-06-01       c

4 2020-06-30       d

5 2020-07-01       e

6 2020-07-31       f

7 2020-08-01       g

8 2020-08-31       h

9 2020-09-01       i

注意:我假设你的MyDate专栏已经在dtype: datetime64[ns]


查看完整回答
反对 回复 2023-07-11
  • 1 回答
  • 0 关注
  • 63 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信