Python 从数据帧中删除连续的asc/desc序列

Python 从数据帧中删除连续的asc/desc序列,python,pandas,dataframe,Python,Pandas,Dataframe,我正在考虑一种泛aistic方法(不是循环)来消除所有连续的积极或消极pct变化。假设我有这样一个数据帧: df=pd.数据帧([1,2,3,5,4,3,2,4,5,6,7,8,9]) 我想删除存在连续升序/降序序列的所有中间点。最终输出为[1,5,2,9]。谢谢 您可以在此处使用scipy.signal的argrelextrema功能 from scipy.signal import argrelextrema arr = df.iloc[:, 0].values i = argrelext

我正在考虑一种泛aistic方法(不是循环)来消除所有连续的积极或消极pct变化。假设我有这样一个数据帧:

df=pd.数据帧([1,2,3,5,4,3,2,4,5,6,7,8,9])


我想删除存在连续升序/降序序列的所有中间点。最终输出为[1,5,2,9]。谢谢

您可以在此处使用
scipy.signal
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])]

如果要保留数据帧结构,可以使用
iloc
索引

df.iloc[np.sort(np.r_[i, j])]

    0
0   1
3   5
6   2
12  9

换句话说,您需要选择
A[i-1]>A[i]
A[i-1]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:]))])
df=pd.数据帧([1,2,3,4,5,4,3,2,4,5,6,7,8,9])
numbers\u list=df[0]。values.tolist()
df=pd.DataFrame([item[1]用于筛选器中的项(lambda x:((x[2]x[0])或(x[2]>x[1]

对于这些项目,您还必须从给定数组中提取第一个和最后一个项目。

也许您指的是升序或降序。很抱歉,您已经对其进行了修改,使其更加清晰。是否可以再次维护数据帧的索引?@smallcat31?啊哈,这是我回答的你的第三个问题。不客气,还有三个;-)
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:]))])