【问题标题】:Pandas Filter dataframe according to working daysPandas 根据工作日过滤数据框
【发布时间】:2021-08-30 22:36:34
【问题描述】:

我想根据工作日过滤 df。df 是:

name     date
aaa    12/06/2021
bbb    11/06/2021
ccc    10/06/2021
zzz    15/06/2021
ddd    13/06/2021
eee    10/05/2021
fff    01/06/2021
ggg    10/05/2021
hhh    13/06/2021
iii    14/06/2021
nnn    15/06/2021
jjj    15/06/2021

现在对于日常流程,我想要两个工作日之前的所有行,这意味着 2021 年 6 月 13 日将不包括在内,因为它是星期日。我使用了

new_date = dt.date.today()-pd.Timedelta(2, unit='d')
new_date = pd.to_datetime(new_date)
new_df = df[df['date'] < new_date]

输出应该是

name     date
aaa    12/06/2021
bbb    11/06/2021
ccc    10/06/2021
eee    10/05/2021
fff    01/06/2021
ggg    10/05/2021

但它也给我星期天,即 2021 年 6 月 13 日。任何人都可以在这里帮助我

【问题讨论】:

  • 预期输出如何?

标签: python pandas dataframe datetime filter


【解决方案1】:

如果只需要排除周日使用offsets.CustomBusinessDay:

df['date'] = pd.to_datetime(df['date'], dayfirst=True)

offset = pd.offsets.CustomBusinessDay(2, weekmask='Mon Tue Wed Thu Fri Sat')
new_date = pd.to_datetime('today').normalize() - offset
print (new_date)
2021-06-12 00:00:00

new_df = df[df['date'] <= new_date]
print (new_df)
  name       date
0  aaa 2021-06-12
1  bbb 2021-06-11
2  ccc 2021-06-10
5  eee 2021-05-10
6  fff 2021-06-01
7  ggg 2021-05-10

【讨论】:

  • 它工作但给了我 2021-06-12 01:13:23.847682 ....我只想要 2021-06-12 甚至在 new_date = pd.to_datetime(new_date) 之后它也不会来像这样
  • @naina - Anwer 由normalize编辑
猜你喜欢
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-31
  • 2016-11-09
  • 2020-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多