You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于pandas.index.asof_locs使用示例及mask参数的疑问求助

使用pandas.Index.asof_locs批量匹配最近日期时间

核心说明

asof_locs是asof的批量版本,能一次性处理多个日期时间输入,返回每个输入对应的目标索引位置。它的第二个参数mask是一个与目标索引长度一致的布尔数组:

  • mask[i] = True:表示索引中第i个位置的日期时间可以被纳入匹配范围
  • mask[i] = False:该位置会被排除,不会被选中

如果不需要过滤任何索引行,直接传入全True的布尔数组即可。

代码示例

假设你的数据结构如下:

import pandas as pd
import numpy as np

# 构造目标DataFrame,索引为已排序的日期时间
df = pd.DataFrame(
    {'price': [100, 101, 102, 103]},
    index=pd.to_datetime(['2024-01-01', '2024-01-03', '2024-01-05', '2024-01-07'])
)

# 待匹配的日期时间列表
dt = pd.to_datetime(['2024-01-02', '2024-01-04', '2024-01-08'])

接下来用asof_locs批量获取匹配位置:

# 生成全True的mask(所有索引行都有效)
mask = np.ones(len(df.index), dtype=bool)

# 调用asof_locs,得到每个dt对应的df索引位置
locs = df.index.asof_locs(where=dt, mask=mask)

# 根据位置获取对应的日期和价格
matched_dates = df.index[locs]
matched_prices = df['price'].iloc[locs]

print("匹配的日期:", matched_dates.tolist())
print("对应的价格:", matched_prices.tolist())

输出结果:

匹配的日期: [Timestamp('2024-01-01 00:00:00'), Timestamp('2024-01-03 00:00:00'), Timestamp('2024-01-07 00:00:00')]
对应的价格: [100, 101, 103]

注意事项

  • 目标DataFrame的索引必须是单调递增排序的,否则asof_locs无法正常工作。如果索引未排序,先执行df = df.sort_index()。
  • 如果需要过滤特定行(比如排除价格为空的行),可以这样生成mask:mask = df['price'].notna().values

内容的提问来源于stack exchange,提问作者user1234440

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 20:06:28