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

求Pandas向量化函数:计算时间序列中价格增长n%所需时长

问题需求

给定一个包含二手车价格时间序列的Pandas DataFrame(索引为时间步长),需要实现向量化函数,对每个单元格的价格,计算后续首次达到该价格增长n%所需的时间步长(索引差值);若后续永远无法达到目标价格,则返回nan。每行计算独立,可通过向量化实现高效运算。

示例数据与预期输出

输入数据

import numpy as np
import pandas as pd

df = pd.DataFrame(
    [
        1490.47,
        1492.98,
        1494.69,
        1497.43,
        1499.02,
        1503.29,
        1501.60,
        1502.80,
        1502.30,
        1509.38,
        1512.01,
        1508.98,
        1512.63,
    ],
    columns=['price'],
)
df.index.names = ['time']
n = 1/100  # 1%增长目标

预期输出

time_to_growth
time                  
0                  9.0
1                  8.0
2                  8.0
3                  NaN
4                  NaN
5                  NaN
6                  NaN
7                  NaN
8                  NaN
9                  NaN
10                 NaN
11                 NaN
12                 NaN
向量化解决方案
def compute_time_to_growth(df, n):
    prices = df['price'].values
    # 计算每个价格增长n%后的目标值
    target_prices = prices * (1 + n)
    # 为每个目标值,在价格数组中找到第一个大于它的索引
    first_pos = np.searchsorted(prices, target_prices, side='right')
    # 计算时间步长差
    time_diffs = first_pos - np.arange(len(prices))
    # 过滤无效结果:位置超出数组、对应价格不达标、步长差<=0(无后续数据达标)
    invalid_mask = (first_pos >= len(prices)) | (prices[first_pos] <= target_prices) | (time_diffs <= 0)
    time_diffs[invalid_mask] = np.nan
    # 将结果加入原DataFrame
    df['time_to_growth'] = time_diffs
    return df

# 调用示例
result_df = compute_time_to_growth(df, n)
print(result_df[['time_to_growth']])
方案说明
  1. 向量化目标计算:直接通过NumPy数组运算生成所有价格的目标值,避免逐行循环,效率极高。
  2. 高效查找达标位置:np.searchsorted利用二分查找实现向量化定位,时间复杂度为O(N log N),远优于O(N²)的循环实现,适合大规模数据。
  3. 严格无效值过滤:通过掩码排除三种无效情况,确保结果仅保留有效时间步长,其余设为nan。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 11:57:07