熊猫营业日抵消:索取简单示例

时间:2020-03-01 19:44:21

标签: python pandas datetime indexing

我有一个带有日期时间索引的数据框“ df”。这是其尺寸的大致快照:

var li = document.createElement("li");
li.dataset.path = String.raw`c:\WINDOWS\system32\mspaint.exe`;
li.matches(String.raw`li[data-path^="c:\\WINDOWS\\system32\\mspaint.exe"]`); // true
li.matches(String.raw`li[data-path^=c\:\\WINDOWS\\system32\\mspaint\.exe]`); // true

索引中的某些天是周末和节假日。

我想将日期时间索引为“ df”的所有日期移动到各自最近的(美国)工作日(即周一至周五,节假日除外)。

您如何建议我这样做?我知道Pandas为此提供了"timeseries offset"工具。但是,我还没有找到一个例子,可以使新手读者理解。

你能帮忙吗?

1 个答案:

答案 0 :(得分:1)

我不熟悉此类,但是在查看源代码后,实现这一目标似乎很简单。请记住,它选择的是下一个最近的工作日,这意味着星期六变成了星期一,而不是星期五。同时使索引不唯一也会在您的DataFrame上decrease performance,所以我建议将这些值分配给新列。

一个先决条件是,您必须确保索引是datetimetimedelta, pd.tseries.offsets.Tick这三种类型中的任何一种。

offset = pd.tseries.offsets.CustomBusinessDay(n=0)

df.assign(
    closest_business_day=df.index.to_series().apply(offset)
)

            V1  V2  V3  V4  V5 closest_business_day
2008-01-12   4  15  11   7   1           2008-01-14
2008-01-13   5   2   8   7   1           2008-01-14
2008-01-14  13  13   9   6   4           2008-01-14
2008-01-15  14  15  12   9   3           2008-01-15
2008-01-16   1  10   2  12  15           2008-01-16
2008-01-17  10   5   9   9   1           2008-01-17
2008-01-18  13  11   5   7   2           2008-01-18
2008-01-19   2   6   7   9   6           2008-01-21
2008-01-20   5   4  14   3   7           2008-01-21
2008-01-21  11  11   4   7  15           2008-01-21
2008-01-22   9   4  15  10   3           2008-01-22
2008-01-23   2  13  13  10   3           2008-01-23
2008-01-24  12  15  14  12   8           2008-01-24
2008-01-25   1   4   2   6  15           2008-01-25