计算超过阈值的连续值数量(Pandas Dataframe)

时间:2018-10-07 17:56:27

标签: python pandas numpy dataframe counting

我有一个形状为(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的错误。

您知道为什么会这样吗? 如果您有其他选择,我非常愿意尝试。

谢谢。

0 个答案:

没有答案