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

Python如何按日期拆分多维数组并按月份匹配输出对应值

代码修改方案

你原有代码的核心问题如下:

  • 没有将字符串格式的日期转换为可比较的时间类型,np.digitize无法对字符串日期做正确的区间分组
  • 函数参数传递错误,内部引用了未定义的PnL变量
  • 逻辑没有关联匹配日期数量和Values数组的取值规则

修改后的完整代码如下:

import numpy as np 

Values = np.array([[100,123,135.3,139.05,156.08,163.88,173.72],
                  [100,110,113,126.56,132.89,140.86],
                  [100,103,115.36,121.13,128.4],
                  [100,112,117.6,124.66],
                  [100,105,111.3],
                  [100,106]])

Val_dates= ['2015-11-01 01:03:00', '2015-11-08 12:56:00', '2015-11-11 02:30:00', '2015-11-14 04:23:00', '2016-02-11 02:00:00', '2016-02-15 15:00:00']

month_changes = ['2015-11-01 00:00:00', '2015-12-01 00:00:00', '2016-01-01 00:00:00',
 '2016-02-01 00:00:00', '2016-03-01 00:00:00']

# 统一转成datetime64格式
format_month = np.sort(np.array(month_changes, dtype='datetime64'))
val_dates_arr = np.array(Val_dates, dtype='datetime64')

def Monthly_Pnls(val_dates, values, month_bins):
    # 统计每个日期所属的月份区间
    digit_month = np.digitize(val_dates, month_bins)
    # 统计每个区间的匹配数量
    count_per_month = np.bincount(digit_month, minlength=len(month_bins)+1)[1:len(month_bins)+1]
    res = []
    for idx, cnt in enumerate(count_per_month):
        if cnt == 0:
            res.append(0.0)
        else:
            # 匹配数为cnt,取对应行的cnt-1索引值
            res.append(values[idx][cnt-1])
    return np.array(res)

# 调用函数
output = Monthly_Pnls(val_dates_arr, Values, format_month)
print(output)

运行上述代码输出为[139.05, 0, 0, 106, 0],符合需求逻辑。你提供的第二个测试用例可直接复用该函数,仅需替换Values变量即可得到对应预期输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:15:01