1

我想在一个额外的列中将我的时间序列(来自中国的数据)中的日子标记为假日(布尔真)和非假日(布尔假)。

我是这个话题的新手,目前我正试图找出解决这个问题的方法。

我在 2020 年有以下日子作为中国法定节假日:

2020 年中国假期

据我所知,中国没有开箱即用的日历,所以我必须创建一个自定义日历,如下所示:

from pandas.tseries.holiday import Holiday,AbstractHolidayCalendar
    class ChineseHolidays(AbstractHolidayCalendar):
    rules = [Holiday('Chinese New Year', month=1, day=25),
             'Question: How to add more than one day?',
             etc,
            ...]

    cal = ChineseHolidays()

接下来的步骤是创建 Holidays 列,如下所示:

holidays = cal.holidays(start=X['timestamp'].min(), end = X['timestamp'].max())

X.assign(Holidays=X['timestamp'].isin(cal.holidays()).astype(int))

我的问题是:

1)这通常是一个合适的方法吗?

2) 如何在 Holiday('Chinese New Year', month=1, day=25) 行中定义从 1 月 24 日开始到 1 月 30 日结束的日子?有没有办法定义休息日而不是只定义一天?

谢谢你的帮助。

最好的,

B.

4

2 回答 2

0

中国人使用农历。所以你可以在 python 中使用这样的库:

pip 安装 LunarCalendar

import datetime
from lunarcalendar import Converter, Solar, Lunar, DateNotExist

l = Lunar(year=2020, month=1, day=1, isleap=False)
print(Converter.Lunar2Solar(l))

返回规范 2020-01-25

于 2020-05-16T17:23:10.330 回答
0

在我看来,Pandas 有许多不同的日期方法,支持周期和重复日期。

https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html

他们还提到在假期使用它,所以我怀疑这可能是您正在寻找的。

例子

In [86]: pd.date_range('2018-01-01', '2018-01-05', periods=5)
Out[86]: 
DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04',
               '2018-01-05'],
              dtype='datetime64[ns]', freq=None)
于 2020-05-16T18:07:30.467 回答