当前位置: 首页 > news >正文

【Pandas】pandas DataFrame asof

Pandas2.2 DataFrame

Time Series-related

方法描述
DataFrame.asfreq(freq[, method, how, …])用于**将时间序列数据转换为指定频率(resample to frequency)**的方法
DataFrame.asof(where[, subset])用于查找时间序列中最接近指定时间点的非 NaN 值的方法

pandas.DataFrame.asof()

pandas.DataFrame.asof() 是一个用于查找时间序列中最接近指定时间点的非 NaN 值的方法。它常用于金融、时间序列分析中,用于“向前查找”最接近但不晚于给定时间点的数据。


📌 方法签名
DataFrame.asof(where, subset=None)

🔧 参数说明:
参数说明
where单个时间戳或一维 datetime-like 数组(如 Timestamp, str, datetime
subset可选参数,指定在哪些列中进行 as-of 查找;如果不传,则对整个 DataFrame 进行操作

⚠️ 注意:索引必须是单调递增的(sorted),否则结果可能不准确!


✅ 返回值
  • 如果 where 是单个时间点,返回一个 Series
  • 如果 where 是多个时间点,返回一个 DataFrame,其索引为 where 的时间点;
  • 每个元素表示在该列中,在不超过 where 时间点的前提下,最后一个非 NaN 值

🧪 示例代码及结果
示例 1:基本用法(单个时间点)
import pandas as pd
import numpy as np# 创建带时间索引的 DataFrame
index = pd.date_range('2025-01-01', periods=5, freq='D')
df = pd.DataFrame({'A': [10, np.nan, 30, np.nan, 50],'B': [100, 200, np.nan, 400, 500]
}, index=index)print("Original DataFrame:")
print(df)
输出:
             A      B
2025-01-01  10.0  100.0
2025-01-02   NaN  200.0
2025-01-03  30.0    NaN
2025-01-04   NaN  400.0
2025-01-05  50.0  500.0
# 查询最接近 '2025-01-04' 的每一列的 asof 值
result = df.asof('2025-01-04')
print("\n.asof('2025-01-04') result:")
print(result)
输出:
A    30.0
B    400.0
Name: 2025-01-04 00:00:00, dtype: float64

示例 2:多个时间点查询
where_times = pd.to_datetime(['2025-01-02', '2025-01-04', '2025-01-06'])
result = df.asof(where_times)
print("\n.asof(['2025-01-02', '2025-01-04', '2025-01-06']) result:")
print(result)
输出:
              A      B
2025-01-02   10.0  200.0
2025-01-04   30.0  400.0
2025-01-06   50.0  500.0

示例 3:使用 subset 指定列
# 只对列 'A' 进行 asof 查询
result = df.asof('2025-01-04', subset=['A'])
print("\n.asof('2025-01-04', subset=['A']) result:")
print(result)
输出:
A    30.0
Name: 2025-01-04 00:00:00, dtype: float64

示例 4:时间点早于所有索引时间的情况
result = df.asof('2024-12-31')
print("\n.asof('2024-12-31') result (before all index):")
print(result)
输出:
A   NaN
B   NaN
Name: 2024-12-31 00:00:00, dtype: float64

🧠 应用场景
场景说明
金融数据查询如查找某个时刻前的最新价格、成交量等
时间序列插值在不进行插值的情况下获取最近的有效值
事件驱动分析在事件发生前后查找最近的历史数据
缺失值处理快速获取最近有效观测值作为替代
实时系统回溯获取截止到某一时间点的最新状态

⚠️ 注意事项
  • 索引必须是 DatetimeIndex 并且是排序好的升序
  • 如果查询的时间早于所有索引时间,返回 NaN
  • 对于每列来说,会独立查找最后非空值;
  • 不会对数据做任何插值或计算,只是取已有数据中“最接近”的那一项。

✅ 总结对比
方法是否基于时间索引是否查找最近非空值是否支持多时间点
.asof()
.loc[]❌(需精确匹配)
.reindex()❌(引入 NaN)
.ffill()✅(整段填充)

如果你希望在时间序列中快速查找每个列在某个时间点前的最后一个有效值asof() 是非常高效且直观的选择。

相关文章:

  • 公司名称大全简单大气三个字天津seo公司
  • 创建网站的向导和模板重庆seo公司怎么样
  • 网站软文伪原创seo结算系统
  • 惠通网站建设2022年最新热点素材
  • wordpress安全监测浙江关键词优化
  • 重庆川九建设有限责任公司官方网站全国疫情高峰感染高峰进度查询
  • 大语言模型的通用局限性与全球技术演进
  • 华为运维工程师面试题(英语试题,内部资料)
  • 融云在华为开发者大会分享智能办公平台的鸿蒙化探索实践
  • 【西门子OPcenter 2401】中文包导入
  • Wpf的Binding
  • IBMS 智能化系统:让建筑提前进入 AIoT 智慧纪元​
  • 在 GitLab CI 中配置多任务
  • 康谋方案 | ARXML 规则下 ECU 总线通讯与 ADTF 测试方案
  • MicroPython网络编程:AP模式与STA模式详解
  • 专题:2025医疗AI应用研究报告|附200+份报告PDF汇总下载
  • SpringCloud系列(35)--使用HystrixDashboard进行服务监控
  • 《AI大模型应用技术开发工程师》学习总结
  • 从0开始学习R语言--Day31--概率图模型
  • jsoncpp-src-0.5.0编译
  • 多模态大模型(从0到1)
  • 抖音视频怎么去掉抖音号水印保存
  • 2023年全国青少年信息素养大赛Python 复赛真题——玩石头游戏
  • Vue 英雄列表搜索与排序功能实现
  • 各计算机语言在机器人领域的应用
  • 《汇编语言:基于X86处理器》第4章 数据传送、寻址和算术运算(2)