【发布时间】:2020-07-20 03:53:47
【问题描述】:
我有一个函数 peak_value,它接受两个输入区域和数据,并在数据中返回一个新列,并将潜在峰值作为输出。我实际上想在数据帧列表上应用这个峰值函数,例如 data = [df1, df2, df3...dfn2] 每个数据帧都有各自的面积值,例如 area = [a1, a2, a3.....an] .我已经应用了 argrelextrema 函数来加快处理速度,但到目前为止还没有成功。有什么办法让它快点?
def peak_value(data,area):
lag = np.round(5 + np.log10(area))
data_tmp = data.loc[data['loc_max']==1]
data_sorted = data_tmp.sort_values(by='value',ascending=False)
data_sorted['idx'] = data_sorted.index
data_sorted = data_sorted.reset_index(drop = True)
flag = 0
i = 0
updated = len(data_sorted)
while i < updated and flag == 0:
lag_pre = np.arange(data_sorted['date'][i]-lag,data_sorted['date'][i])
lag_post = np.arange(data_sorted['date'][i]+1,data_sorted['date'][i]+lag+1)
lag_interval = np.concatenate((lag_pre,lag_post))
ind_del = data_sorted.iloc[np.isin(data_sorted['date'],lag_interval)].index
data_sorted = data_sorted.drop(data_sorted.index[ind_del])
data_sorted = data_sorted.reset_index(drop=True)
updated = len(data_sorted)
if i < updated:
flag = 0
else:
flag = 1
i = i+1
#adds a column that says which are the potential peaks
data['Potential_peaks'] = np.zeros(len(data))
data['Potential_peaks'].loc[data_sorted['idx']] = 1
return data
def max_new(data):
loc_opt_ind = argrelextrema(df, np.greater)
Potential_peaks = np.zeros(len(data))
Potential_peaks[loc_opt_ind] = 1
data['Potential_peaks']= Potential_peaks
return data
new_max= []
for index, df in enumerate(data):
max_values = max_new(df).Potential_peaks
new_max.append(max_values)
【问题讨论】:
-
所问问题的答案是“是”。请提供此处定义的 MCVE:stackoverflow.com/help/minimal-reproducible-example。确保它实际上是最小的。另外,请阅读stackoverflow.com/help/how-to-ask
标签: python python-3.x pandas python-2.7 scipy