python - 通过熊猫数据框中的日期时间索引查找行位置
问题描述
我有一个数据框,它有一个 DateTimeIndex 和一个 X 2d numpy 数组,它只是该数据框的值。我想通过数据框的索引选择一些行
dataset[from_d:to_d]
其中 from_d 和 to_d 是时间戳。数据集切片得很好,但我需要获取数据集中这些行的位置。我需要它们,因为那时我想在 X numpy 数组中选择相同的行。就像是
X[indexes]
我已经尝试过np.where(dataset[from_d:to_d])[0]
,但是当数据集的形状为 (15075, 13117) 时,它以某种方式给了我一个 (23149590,) 数组。有没有比 where 更好的方法来做到这一点?
解决方案
rng = pd.date_range('2017-04-03', periods=10)
dataset = pd.DataFrame({'a': range(10)}, index=rng)
print (dataset)
a
2017-04-03 0
2017-04-04 1
2017-04-05 2
2017-04-06 3
2017-04-07 4
2017-04-08 5
2017-04-09 6
2017-04-10 7
2017-04-11 8
2017-04-12 9
from_d = '2017-04-05'
to_d = '2017-04-10'
print (dataset[from_d:to_d])
a
2017-04-05 2
2017-04-06 3
2017-04-07 4
2017-04-08 5
2017-04-09 6
2017-04-10 7
indexes = dataset.index.get_indexer(dataset[from_d:to_d].index)
print (indexes)
[2 3 4 5 6 7]
indexes = dataset.index.searchsorted(dataset[from_d:to_d].index)
print (indexes)
[2 3 4 5 6 7]
编辑:
对于不唯一的 DatetimeIndex 是否可以使用唯一索引和Index.get_indexer_for
:
rng = pd.date_range('2017-04-03', periods=10)
dataset = pd.DataFrame({'a': range(20)}, index=rng.append(rng)).sort_index()
print (dataset)
a
2017-04-03 0
2017-04-03 10
2017-04-04 1
2017-04-04 11
2017-04-05 2
2017-04-05 12
2017-04-06 3
2017-04-06 13
2017-04-07 4
2017-04-07 14
2017-04-08 5
2017-04-08 15
2017-04-09 6
2017-04-09 16
2017-04-10 17
2017-04-10 7
2017-04-11 18
2017-04-11 8
2017-04-12 9
2017-04-12 19
from_d = '2017-04-05'
to_d = '2017-04-10'
i = dataset[from_d:to_d].index.unique()
print (i)
DatetimeIndex(['2017-04-05', '2017-04-06', '2017-04-07', '2017-04-08',
'2017-04-09', '2017-04-10'],
dtype='datetime64[ns]', freq=None)
indexes = dataset.index.get_indexer_for(i)
print (indexes)
[ 4 5 6 7 8 9 10 11 12 13 14 15]
验证索引:
print (dataset.iloc[indexes])
a
2017-04-05 2
2017-04-05 12
2017-04-06 3
2017-04-06 13
2017-04-07 4
2017-04-07 14
2017-04-08 5
2017-04-08 15
2017-04-09 6
2017-04-09 16
2017-04-10 17
2017-04-10 7
推荐阅读
- html - 使 div 响应的更短方法
- groovy - 在 grails4 的 yml 文件中使用 $ 符号作为密码
- javascript - 更改元素中的状态
- javascript - 出现跨域读取阻塞 (CORB) 错误
- postgresql - PostgresSQL 嵌套 jsonb 查询多个键/值对
- proxy - 使用代理爬网
- javascript - CSS下拉菜单在第一次点击时没有打开
- powershell - 反正有没有自动获取脚本中的主机名?
- c# - HttpContent.ReadFromJsonAsync 不会反序列化通用对象(Blazor WebAssembly)
- sharepoint - 如何显示自定义 SharePoint 列表视图的 html 页面?