检索特定日期的索引

时间:2019-08-07 11:25:18

标签: python pandas data-analysis

我正在尝试为我的数据集检索与特定月份相对应的索引。

这是为了在训练测试数据拆分后跟踪用于训练神经网络的索引线。我想知道我的预测对应的日期。

我尝试了以下操作,其中我检索了与特定日期相对应的索引。有没有办法在一天中使用类似*的参数,这样我就可以检索1个月了

target_date = pd.to_datetime('2013-10-24').date()
metadata.loc[metadata.Starttime.dt.date == target_date, :].index.values

给出

array([0, 1], dtype=int64)

我希望这样:

array([10, 14, 17], dtype=int64)

其中10、14、17是与我搜索的月份相对应的索引,而不是特定的一天

示例:

installation = range(0,5)
equipment = range(0,5)
tag_name = range(0,5)
start_time = ['2013-10-15 02:30:24.670', '2013-9-15 02:30:24.670', '2013-8-15 02:30:24.670', '2013-7-15 02:30:24.670', '2013-6-15 02:30:24.670']

dic =  {'Installation':installation,'Equipment':equipment,'Tag name':tag_name,'Starttime':start_time,}  

metadata = pd.DataFrame(dic)  #Create the dataframe
metadata['Starttime'] = pd.to_datetime(metadata['Starttime'])

target_date = pd.to_datetime('2013-10-15').date()
metadata.loc[metadata.Starttime.dt.date == target_date, :].index.values

2 个答案:

答案 0 :(得分:0)

您可以更改过滤条件以获取整个月份:

metadata.loc[
    (metadata.Starttime.dt.month == 10) & 
    (metadata.Starttime.dt.year == 2013)
].index.values

答案 1 :(得分:0)

我认为您需要比较Series.dt.to_period为列和标量Timestamp.to_period创建的月份值:

installation = range(0,5)
equipment = range(0,5)
tag_name = range(0,5)
#change first 3 datetimes for same months
start_time = ['2013-10-15 02:30:24.670', '2013-10-16 02:30:24.670', '2013-10-17 02:30:24.670',
              '2013-7-15 02:30:24.670', '2013-6-15 02:30:24.670']

dic =  {'Installation':installation,'Equipment':equipment,
        'Tag name':tag_name,'Starttime':start_time}  

metadata = pd.DataFrame(dic)  #Create the dataframe
metadata['Starttime'] = pd.to_datetime(metadata['Starttime'])
print (metadata)
   Installation  Equipment  Tag name               Starttime
0             0          0         0 2013-10-15 02:30:24.670
1             1          1         1 2013-10-16 02:30:24.670
2             2          2         2 2013-10-17 02:30:24.670
3             3          3         3 2013-07-15 02:30:24.670
4             4          4         4 2013-06-15 02:30:24.670

target_date = pd.to_datetime('2013-10-15').to_period('m')
idx = metadata.loc[metadata.Starttime.dt.to_period('m') == target_date].index.values
print (idx)
[0 1 2]