我有一个形状为(34,288)的数据集,数据类型float64定义为DataFrame。 数据在80到-20之间变化。
每列都是产品,行是测试结果的时间序列。
我想计算满足条件(大于10)的连续值的数量以及每列开始的索引,这样我将有两个由288个值组成的数组(每列一个值)< / p>
所以@Divakar帮助我编写了代码:
def maxisland_start_len(a, trigger_val, comp_func=np.greater):
pad = np.zeros(a.shape[1],dtype=bool)
mask = np.vstack((pad, comp_func(a,trigger_val), pad))
mask_step = mask[1:] != mask[:-1]
idx = np.flatnonzero(mask_step.T)
island_starts = idx[::2]
island_lens = idx[1::2] - idx[::2]
n_islands_percol = mask_step.sum(0)//2
bins = np.repeat(np.arange(a.shape[1]),n_islands_percol)
scale = island_lens.max()+1
scaled_idx = np.argsort(scale*bins + island_lens)
grp_shift_idx = np.r_[0,n_islands_percol.cumsum()]
max_island_starts = island_starts[scaled_idx[grp_shift_idx[1:]-1]]
max_island_percol_start = max_island_starts%(a.shape[0]+1)
max_island_percol_len = np.maximum.reduceat(island_lens, grp_shift_idx[:-1])
return max_island_percol_start, max_island_percol_len
所以我运行它:
#converting my DataFrame to Numpy array first
na = df.values
#Then running the method for threshold 5
row_index, length = maxisland_start_len(na, 5)
它给出了错误:
IndexError: index 283 out-of-bounds in maximum.reduceat [0, 283)
奇怪的是,当我运行不同的值时,会导致不同的错误:
持续10:
IndexError: index 126 out-of-bounds in maximum.reduceat [0, 126)
6:
IndexError: index 211 out-of-bounds in maximum.reduceat [0, 211)
当我为低于4的值运行它时,它工作正常。但是,它不适用于高于4的值。
我什至尝试将原始表中的数字全部除以10,然后对值1运行该方法,从而按比例减少数字。最后我遇到了对值10的错误。
您知道为什么会这样吗? 如果您有其他选择,我非常愿意尝试。
谢谢。