【问题标题】:Calculate the number of weekends (Saturdays and Sundays), between two dates计算两个日期之间的周末数(周六和周日)
【发布时间】:2019-05-04 16:07:46
【问题描述】:

我有一个包含两个日期列的数据框,一个开始日期和一个结束日期。如何使用 pandas 或 python date-times 找到开始日期和结束日期之间的周末数

我知道 pandas 有 DatetimeIndex 从星期一开始,每周的每一天都会返回 0 到 6 的值

# create a data-frame
import pandas as pd
df = pd.DataFrame({'start_date':['4/5/19','4/5/19','1/5/19','28/4/19'],
                   'end_date': ['4/5/19','5/5/19','4/5/19','5/5/19']})

# convert objects to datetime format
df['start_date'] = pd.to_datetime(df['start_date'], dayfirst=True)
df['end_date'] = pd.to_datetime(df['end_date'], dayfirst=True)

# Trying to get the date index between dates as a prelim step but fails
pd.DatetimeIndex(df['end_date'] - df['start_date']).weekday

我希望结果是这样的:(weekend_count 包括开始日期和结束日期)

start_date  end_date    weekend_count
4/5/2019    4/5/2019    1
4/5/2019    5/5/2019    2
1/5/2019    4/5/2019    1
28/4/2019   5/5/2019    3

【问题讨论】:

  • 您可能会提到您的日期是 dd/mm/yyyy 格式。
  • dayfirst=True 不为此调整吗?

标签: pandas python-datetime


【解决方案1】:

IIUC

df['New']=[pd.date_range(x,y).weekday.isin([5,6]).sum() for x , y in zip(df.start_date,df.end_date)]
df
  start_date   end_date  New
0 2019-05-04 2019-05-04    1
1 2019-05-04 2019-05-05    2
2 2019-05-01 2019-05-04    1
3 2019-04-28 2019-05-05    3

【讨论】:

    【解决方案2】:

    尝试:

    df['weekend_count']=((df.end_date-df.start_date).dt.days+1)-np.busday_count(
                         df.start_date.dt.date,df.end_date.dt.date)
    print(df)
    

      start_date   end_date  weekend_count
    0 2019-05-04 2019-05-04              1
    1 2019-05-04 2019-05-05              2
    2 2019-05-01 2019-05-04              1
    3 2019-04-28 2019-05-05              3
    

    【讨论】:

    • 我不确定这是否正常工作。 2015 年 4 月 11-16 日有 2 个周末,包括 11 日和 16 日。在这种情况下返回 3。
    猜你喜欢
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    相关资源
    最近更新 更多