我正在考虑一种去除所有连续阳性或阴性pct变化的pandaistic方式(不是循环)。假设我有一个这样的数据帧:
df=pd.DataFrame([1,2,3,5,4,3,2,4,5,6,7,8,9])
我想删除连续上升/下降序列之间的所有点。最终产出为[1,5,2,9]。谢谢!
答案 0 :(得分:1)
您可以在此处使用scipy.signal
的{{1}}功能。
argrelextrema
from scipy.signal import argrelextrema
arr = df.iloc[:, 0].values
i = argrelextrema(arr, np.greater_equal)[0]
j = argrelextrema(arr, np.less_equal)[0]
arr[np.sort(np.r_[i, j])]
如果要保留DataFrame结构,可以使用array([1, 5, 2, 9])
来索引
iloc
答案 1 :(得分:1)
使用其他字词,您需要选择A[i-1] > A[i] < A[i+1]
或A[i-1] < A[i] > A[i+1]
df = pd.DataFrame([1,2,3,4,5,4,3,2,4,5,6,7,8,9])
numbers_list = df[0].values.tolist()
df = pd.DataFrame([item[1] for item in filter(lambda x: ((x[2] < x[1] > x[0]) or (x[2] > x[1] < x[0])), zip(numbers_list, numbers_list[1:], numbers_list[2:]))])
对于这些项目,您还必须连接给定数组中的第一个和最后一个项目。