相关疑难解决方法(0)

使用pandas在开始日期和结束日期之间获取工作日

我正在使用熊猫,我想知道使用熊猫在开始日期和结束日期之间的最简单方法是什么?

关于在Python中执行此操作有很多帖子(例如),但我有兴趣直接使用pandas,因为我认为pandas可能很容易处理这个问题.

python pandas

24
推荐指数
6
解决办法
4万
查看次数

Pandas DatetimeIndex和Timestamp之间的工作日数

这与这里的问题非常相似,但我想知道大熊猫是否有一种干净的方式让工作日意识到TimedeltaIndex?最终,我试图获取DatetimeIndex和Timestamp之间的工作日数(没有假日日历).根据引用的问题,这样的事情是有效的

import pandas as pd
import numpy as np
drg = pd.date_range('2015-07-31', '2015-08-05', freq='B')
A = [d.date() for d in drg]
B = pd.Timestamp('2015-08-05', 'B').date()
np.busday_count(A, B)
Run Code Online (Sandbox Code Playgroud)

这使

array([3, 2, 1, 0], dtype=int64)
Run Code Online (Sandbox Code Playgroud)

但这似乎有点笨拙.如果我尝试类似的东西

drg - pd.Timestamp('2015-08-05', 'B')
Run Code Online (Sandbox Code Playgroud)

我得到了一个TimedeltaIndex,但工作日频率被取消了

TimedeltaIndex(['-5 days', '-2 days', '-1 days', '0 days'], dtype='timedelta64[ns]', freq=None)
Run Code Online (Sandbox Code Playgroud)

只是想知道是否有更优雅的方式来解决这个问题.

python pandas

9
推荐指数
1
解决办法
3801
查看次数

Python/Pandas/Numpy - 直接计算两个日期之间的工作日数,不包括假期

有没有更好/更直接的方法来计算这个比以下?

# 1. Set up the start and end date for which you want to calculate the      
# number of business days excluding holidays.

start_date = '01JAN1986'
end_date = '31DEC1987'
start_date = datetime.datetime.strptime(start_date, '%d%b%Y')
end_date = datetime.datetime.strptime(end_date, '%d%b%Y')

# 2. Generate a list of holidays over this period
from pandas.tseries.holiday import USFederalHolidayCalendar
calendar = USFederalHolidayCalendar()
holidays = calendar.holidays(start_date, end_date)
holidays
Run Code Online (Sandbox Code Playgroud)

这给出了一个pandas.tseries.index.DatetimeIndex

DatetimeIndex(['1986-01-01', '1986-01-20', '1986-02-17', '1986-05-26',
           '1986-07-04', '1986-09-01', '1986-10-13', '1986-11-11',
           '1986-11-27', '1986-12-25', '1987-01-01', '1987-01-19',
           '1987-02-16', '1987-05-25', '1987-07-03', '1987-09-07',
           '1987-10-12', '1987-11-11', '1987-11-26', …
Run Code Online (Sandbox Code Playgroud)

python numpy pandas

6
推荐指数
1
解决办法
1876
查看次数

pandas:to_timedelta 与工作日

我想循环遍历一个只有工作日的日期范围,即没有周末。为此,我使用以下命令,基本上选取一个月中的每个第三个星期五,并使列窗口等于从第三个星期五开始的 2、20 天。这段代码工作得很好。

for beg in pd.bdate_range("2000-01-01", "2017-05-01"):     
     beg= third_friday
     df["window"].loc[beg: beg + pd.to_timedelta(20,"D")] = 2
     if month==12:
         year=year+1
         month=0
     if year>=2017 and month>=3:
         break
     month = month +3
     monthcal = c.monthdatescalendar(year,month)
     third_friday = [day for week in monthcal for day in week if \
                day.weekday() == calendar.FRIDAY and \
               day.month == month][2]  
Run Code Online (Sandbox Code Playgroud)

然而,20 中

df["window"].loc[beg: beg + pd.to_timedelta(20,"D")] = 2
Run Code Online (Sandbox Code Playgroud)

命令指的是 20 天,包括周末,但我希望它指的是 20 个工作日;例如这样的东西:

df["window"].loc[beg: beg + pd.to_timedelta(20, "Weekdays_only")] = 2
Run Code Online (Sandbox Code Playgroud)

是否有一个简单的修复方法,以便我可以用其他内容替换“D”,或者我是否必须重写所有内容?

此外,我还想用不同的值标记第三个星期五周围的日子,例如third_friday之后的day +1是1,day+2是2。为此,我编写了第二个for循环。这里是完整的例子:

for beg in pd.bdate_range("2000-01-01", …
Run Code Online (Sandbox Code Playgroud)

python datetime timedelta pandas

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

pandas ×4

python ×4

datetime ×1

numpy ×1

timedelta ×1