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
相关产品推荐
相关产品推荐

