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

时间:2018-04-20 09:28:37

标签: python pandas dataframe

我正在考虑一种去除所有连续阳性或阴性pct变化的pandaistic方式(不是循环)。假设我有一个这样的数据帧:

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

我想删除连续上升/下降序列之间的所有点。最终产出为[1,5,2,9]。谢谢!

2 个答案:

答案 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:]))])

对于这些项目,您还必须连接给定数组中的第一个和最后一个项目。