首页 > 解决方案 > 如何在熊猫中标记特定时间的日期时间索引?

问题描述

我有一个pandas以日期时间对象作为索引的大型数据框。所代表的每一天被分成 5 分钟的增量。索引是YYYY-MM-DD 00:00:00格式。

如何在上午 10:00 之前和下午 2:00 之后为所有内容创建标志?

我尝试了以下方法:

import pandas
import numpy

condition = [df.index() <= "10:00:00"]
replace = 1
df['early_flag'] = np.select(condition, replace, default = 0)

我收到一条错误消息,指出`Datetimeindex 对象不可调用。

数据如下所示:

datetime              id    name
2004-04-01 09:45:00    5    bypedal
2004-04-01 09:50:00    5    bypedal
2004-04-01 09:55:00    5    bypedal
2004-04-01 10:00:00    5    bypedal
2004-04-01 10:05:00    5    bypedal

我正在寻找的结果是这样的:

datetime              id    name      Early_Flag
2004-04-01 09:45:00    5    bypedal    1
2004-04-01 09:50:00    5    bypedal    1
2004-04-01 09:55:00    5    bypedal    1
2004-04-01 10:00:00    5    bypedal    0
2004-04-01 10:05:00    5    bypedal    0

标签: pandasdatetime

解决方案


尝试使用time日期时间索引的访问器 + np.where

from datetime import time

import numpy as np
import pandas as pd

# modified sample data to demonstrate multiple days and both bounds
df = pd.DataFrame({
    'datetime': ['2004-04-01 09:45:00', '2004-04-02 09:50:00',
                 '2004-04-03 09:55:00', '2004-04-04 10:00:00',
                 '2004-04-05 10:05:00', '2004-04-06 13:05:00',
                 '2004-04-07 14:00:00', '2004-04-07 14:00:01'],
    'id': [5, 5, 5, 5, 5, 5, 5, 5],
    'name': ['bypedal', 'bypedal', 'bypedal', 'bypedal', 'bypedal', 'bypedal',
             'bypedal', 'bypedal']
})
df['datetime'] = pd.to_datetime(df['datetime'])
df = df.set_index('datetime')

df['Early_flag'] = np.where(
    (df.index.time < time(10, 0)) | (df.index.time > time(14, 0)),
    1,
    0
)

print(df)

df

                     id     name  Early_flag
datetime                                    
2004-04-01 09:45:00   5  bypedal           1
2004-04-02 09:50:00   5  bypedal           1
2004-04-03 09:55:00   5  bypedal           1
2004-04-04 10:00:00   5  bypedal           0
2004-04-05 10:05:00   5  bypedal           0
2004-04-06 13:05:00   5  bypedal           0
2004-04-07 14:00:00   5  bypedal           0
2004-04-07 14:00:01   5  bypedal           1

推荐阅读