我有一个带有日期时间索引的数据框“ 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"工具。但是,我还没有找到一个例子,可以使新手读者理解。
你能帮忙吗?
答案 0 :(得分:1)
我不熟悉此类,但是在查看源代码后,实现这一目标似乎很简单。请记住,它选择的是下一个最近的工作日,这意味着星期六变成了星期一,而不是星期五。同时使索引不唯一也会在您的DataFrame上decrease performance,所以我建议将这些值分配给新列。
一个先决条件是,您必须确保索引是datetime,timedelta, 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