1

我设法加载了大量金融工具数据系列的历史数据,按日期索引。

我正在绘制数量,价格信息,没有任何问题。

我现在想要实现的是确定日期是否有大的跳跃,看看我是否遗漏了大块数据。

我想到的想法是以某种方式绘制索引中两个连续日期之间的差异,如果该数字优于 3 或 4(大于周末和周五或周一的银行假期),那么就在那里是一个问题。

问题是我可以弄清楚如何简单地计算 df[next day]-df[day],其中 df 按天索引

4

1 回答 1

2

您可以使用shift Series方法(注意 DatetimeIndex 方法按频率移动):

In [11]: rng = pd.DatetimeIndex(['20120101', '20120102', '20120106']) # DatetimeIndex like df.index

In [12]: s = pd.Series(rng)  # df.index instead of rng

In [13]: s - s.shift()
Out[13]:
0                NaT
1   1 days, 00:00:00
2   4 days, 00:00:00
dtype: timedelta64[ns]

In [14]: s - s.shift() > pd.offsets.Day(3).nanos
Out[14]:
0    False
1    False
2     True
dtype: bool

根据您的需要,也许您可​​以做任何事情,或者找到有问题的值......

In [15]: (s - s.shift() > pd.offsets.Day(3).nanos).any()
Out[15]: True

In [16]: s[s - s.shift() > pd.offsets.Day(3).nanos]
Out[16]:
2   2012-01-06 00:00:00
dtype: datetime64[ns]

或者也许找到最大跳跃(以及它在哪里):

In [17]: (s - s.shift()).max()  # it's weird this returns a Series...
Out[17]:
0   4 days, 00:00:00
dtype: timedelta64[ns]

In [18]: (s - s.shift()).idxmax()
Out[18]: 2

如果您真的想绘制此图,只需绘制差异即可:

(s - s.shift()).plot()
于 2013-07-31T11:19:27.123 回答