我正在尝试将argrelextrema函数应用于数据帧df。但无法正确应用。下面是我的代码
import pandas as pd
from scipy.signal import argrelextrema
np.random.seed(42)
def maxloc(data):
loc_opt_ind = argrelextrema(df.values, np.greater)
loc_max = np.zeros(len(data))
loc_max[loc_opt_ind] = 1
data['loc_max'] = loc_max
return data
values = np.random.rand(23000)
df = pd.DataFrame({'value': values})
np.all(maxloc_faster(df).loc_max)
It gives me error
that loc_max[loc_opt_ind] = 1
IndexError: too many indices for array
数据帧是二维的。也就是说,
df.values
是二维的,甚至当它只有一列时。因此,loc_opt_ind
将包含x和y索引(两个元组;只需打印loc_opt_ind
即可查看),这不能用于索引loc_max
。您可能希望使用df['values'].values
(变成<Series>.values
)或np.squeeze(df.values)
作为输入。注意argrelextrema
在这种情况下仍然返回一个元组,仅返回一个元素,因此您可能需要loc_opt_ind[0]
(np.where
具有类似的行为)相关问题 更多 >
编程相关推荐