- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个类似 python 的数据框
Out[110]:
Time
2014-09-19 21:59:14 55.975
2014-09-19 21:56:08 55.925
2014-09-19 21:53:05 55.950
2014-09-19 21:50:29 55.950
2014-09-19 21:50:03 55.925
2014-09-19 21:47:00 56.150
2014-09-19 21:53:57 56.225
2014-09-19 21:40:51 56.225
2014-09-19 21:37:50 56.300
2014-09-19 21:34:46 56.300
2014-09-19 21:31:41 56.350
2014-09-19 21:30:08 56.500
2014-09-19 21:28:39 56.375
2014-09-19 21:25:34 56.350
2014-09-19 21:22:32 56.400
2014-09-19 21:19:27 56.325
2014-09-19 21:16:25 56.325
2014-09-19 21:13:21 56.350
2014-09-19 21:10:18 56.425
2014-09-19 21:07:13 56.475
Name: Spread, dtype: float64
它会持续很长时间(几个月到几年),所以每天都有很多观察。我想要做的是,我每天都想检索最接近特定时间的时间序列观察,比如 16:00。
到目前为止我的方法是
eodsearch = pd.DataFrame(df['Date'] + datetime.timedelta(hours=16))
eod = df.iloc[df.index.get_loc(eodsearch['Date'] ,method='nearest')]
目前给我一个错误
"Cannot convert input [Time Date, dtype: datetime64[ns]] of type <class 'pandas.core.series.Series'> to Timestamp
此外,我看到 get_loc 也接受了 tolerance 作为输入,所以如果我可以将 tolerance 设置为 30 分钟,那也很好。
关于我的代码为何失败或如何修复它的任何建议?
最佳答案
from pandas.tseries.offsets import Hour
df.sort_index(inplace=True) # Sort indices of original DF if not in sorted order
# Create a lookup dataframe whose index is offsetted by 16 hours
d = pd.DataFrame(dict(Time=pd.unique(df.index.date) + Hour(16)))
(i):使用 reindex
它支持观察的双向查找:(双向兼容)
# Find values in original within +/- 30 minute interval of lookup
df.reindex(d['Time'], method='nearest', tolerance=pd.Timedelta('30Min'))
(ii) :使用 merge_asof
在识别原始 DF
中的唯一日期后:(向后兼容)
# Find values in original within 30 minute interval of lookup (backwards)
pd.merge_asof(d, df.reset_index(), on='Time', tolerance=pd.Timedelta('30Min'))
(iii):通过查询和重建索引获取 +/-
30 分钟带宽间隔的日期:
Index.get_loc
对输入的单个标签进行操作,因此不能将整个系列对象直接传递给它。
相反,DatetimeIndex.indexer_between_time
它给出了索引的指定 start_time
和 end_time
内的所有行将更适合此目的。 (两个端点都包括在内)
# Tolerance of +/- 30 minutes from 16:00:00
df.iloc[df.index.indexer_between_time("15:30:00", "16:30:00")]
用于得出结果的数据:
idx = pd.date_range('1/1/2017', periods=200, freq='20T', name='Time')
np.random.seed(42)
df = pd.DataFrame(dict(observation=np.random.uniform(50,60,200)), idx)
# Shuffle indices
df = df.sample(frac=1., random_state=42)
信息:
df.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 200 entries, 2017-01-02 07:40:00 to 2017-01-02 10:00:00
Data columns (total 1 columns):
observation 200 non-null float64
dtypes: float64(1)
memory usage: 3.1 KB
关于python - 为不规则间隔的数据找到最接近特定时间的每日观察,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42208206/
我想创建一个返回值的方法(我们称之为“z”)。它的值由另一个值决定(我们称之为“y”)。基本上我想要的是满足以下条件: 当 x 接近 0 时,z 接近 100。 当 x 接近无穷大时,z 接近 0。
我正在尝试使用 Java 中的PreparedStatement 执行查询。 当我尝试执行查询时,收到错误号 1064(语法错误)。 我已经在 MySQL 查询浏览器中使用替换值对此进行了测试,效果很
我正在开发一个应用程序来解析 Scala 中的命令。命令的一个例子是: todo get milk for friday 所以计划是让一个非常智能的解析器将行分开并识别命令部分以及字符串中有时间引用的
来自 http://directwebremoting.org/dwr/reverse-ajax/index.html ,它表示它支持轮询、 cometd 、搭载。这是否意味着当我们实现这种方法时,我
我开始研究一个概念,该概念要求我找到一种方法,以给定的速度将矩形移向给定的点。我正在为 Android 开发,所以这对速度非常关键(它也将针对可能的数百个对象计算每一帧。) 我能想到的解决方案如下:
我正在处理一个处理“门票”的表(状态=“开放”或状态=“关闭”)。当票证关闭时,相关系统不会更改状态,而是会创建一个具有“已关闭”状态的重复条目。 对于“ticket_number”关键字段,如果存在
我正在尝试在 python 中执行一些 n-gram 计数,我想我可以使用 MySQL(MySQLdb 模块)来组织我的文本数据。 我有一个很大的表,大约有 1000 万条记录,代表由唯一数字 ID(
我正在尝试将数据添加到 mariadb 表中。我想将 val0 到 val5 作为查询的值传递。但我收到错误 OperationalError: close "%": 语法错误代码 list_Valu
我正在使用 (Py)OpenGL 显示 256 色索引图像。我将着色器与包含调色板的一维纹理一起使用。这是片段着色器代码: #version 330 uniform sampler2D texture
对于我的元素 areallybigpage.com (*),我想看看我们能用 CSS 的 transform: scale(...) 走多远。 这有效并以正常大小显示文本: #id1 { positi
我有两列带有数字数据的 Pandas 表(dtype flaot64)。 我将每列四舍五入到小数点后有 2 位数字,然后使用函数将其四舍五入到接近 0.5,但由于某种原因,只有一列四舍五入为 0.05
我正在构建一个由用户登录和注册组成的应用程序,但每次我在模拟器上测试它时,我都会收到强制关闭。以下是我在日志猫中收到的错误: 08-14 14:06:28.853: D/dalvikvm(828):
我正在尝试在 Python 中实现 Strassen 矩阵乘法。我已经让它发挥了一些作用。这是我的代码: a = [[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4]] b
为什么这不起作用?这与 = 附近的命令字符串语法有关,但我似乎无法弄清楚,在线示例似乎完全相同。编辑: Activated In 是一列。 示例来自 How to select data from d
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及
我有一个测试区,它是来自数据库的动态文本,可能有数千个单词。我希望它中断并在每段中用句号将近 100 个(任意长度)单词作为一个段落。我能够在 100 个单词后中断,但不能完全停止。为了在 100 个
我是 hadoop 和 hive 的新手。我正在尝试将数据加载到配置单元表中,但遇到以下错误。 另一方面,我尝试使用语句 stmt.execute("INSERT INTO employee VALU
这是来自一个统计项目。我定义了下面的函数,但是当n接近400时,第二个方法很慢。第一个方法很好(这里有人帮助了我in this question) import Math.Combinatorics.
我正在尝试创建一个 css 侧边菜单,但是当我关闭菜单并将 div 容器宽度设置为 0 时,链接仍然可见。 这是 jsfiddle - https://jsfiddle.net/atLvp6k7/ 有
我对 MySQL 还很陌生。我必须使用输出参数调用存储过程。我在互联网上搜索了很多,但没有找到解决我的问题的正确方法。如果我使用 @outputParamName 调用存储过程,它会说我在 NULL
我是一名优秀的程序员,十分优秀!