pandas - 如何在熊猫中标记特定时间的日期时间索引?
问题描述
我有一个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
解决方案
尝试使用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
推荐阅读
- reactjs - Slate:推送到数据库并在 Web 中显示
- mysql - 如何使用 Spark 从 .sql 转储中提取包含数据的表?
- pandas - 如何删除使用 pd.get_dummies 后生成的重复列,使用它们的方差作为截止值
- elasticsearch - ElasticSearch must_not to 作为项目数组的过滤器
- python - 是否可以只加载 mnist 或其他元组的一部分
- mysql - 如何修复休眠配置错误和 ExceptionInInitializerError
- javascript - 如何安装和使用带有node js的mongodb?
- visual-studio-code - 排除特定目录被智能感知解析
- sql - 如何从 Oracle 中的日期和月份值中删除前导零?
- python - ValueError:您正在尝试合并 datetime64[ns] 和对象列。如果你想继续,你应该使用 pd.concat