Adr*_*dri 5 python intervals dataframe pandas
我有一个带有 TimeIndexed 值的宽 Pandas 数据框,我想使用我制作的 Interval 对象进行选择:
inter = pd.Interval(pd.Timestamp('2017-12-05 16:36:17'),
pd.Timestamp('2017-12-05 22:00:00'), closed='left')
Run Code Online (Sandbox Code Playgroud)
我尝试了 loc 和 iloc 方法,但它们不接受 Interval 实例作为参数。
我可以这样测试时间戳是否在该间隔内:
pd.Timestamp('2017-12-05 22:00:00') in inter
Run Code Online (Sandbox Code Playgroud)
但我无法编写一行来选择数据帧的行。
设置
s = pd.Series(
pd.date_range('2017-12-05 16:00:00', '2017-12-05 23:00:00', freq='H')
)
s
0 2017-12-05 16:00:00
1 2017-12-05 17:00:00
2 2017-12-05 18:00:00
3 2017-12-05 19:00:00
4 2017-12-05 20:00:00
5 2017-12-05 21:00:00
6 2017-12-05 22:00:00
7 2017-12-05 23:00:00
dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)
以下是针对所有 4 种区间包含情况的解决此问题的方法。
closed='left'
(inter.left <= s) & (s < inter.right)
0 False
1 True
2 True
3 True
4 True
5 True
6 False
7 False
dtype: bool
Run Code Online (Sandbox Code Playgroud)closed='right'
(inter.left < s) & (s <= inter.right)
0 False
1 True
2 True
3 True
4 True
5 True
6 True
7 False
dtype: bool
Run Code Online (Sandbox Code Playgroud)closed='neither'
(inter.left < s) & (s < inter.right)
0 False
1 True
2 True
3 True
4 True
5 True
6 False
7 False
dtype: bool
Run Code Online (Sandbox Code Playgroud)closed='both'
(使用pd.Series.between
,应该稍微更有效率)。
s.between(inter.left, inter.right, inclusive=True)
0 False
1 True
2 True
3 True
4 True
5 True
6 True
7 False
dtype: bool
Run Code Online (Sandbox Code Playgroud)使用任何这些方法计算这些数量后,选择行就很容易了,我们上面刚刚计算的布尔掩码在s[mask]
哪里。mask
归档时间: |
|
查看次数: |
4922 次 |
最近记录: |