접근 방법 # 1 : 여기 NumPy와 기반 접근 방식입니다 -
In [89]: a = np.array([1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3])
...: b = np.array([1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1])
...:
In [90]: idx = np.append(np.nonzero(a[1:] > a[:-1])[0], a.size-1)[:,None] - [2,1,0]
In [91]: b[idx].ravel()
Out[91]: array([5, 6, 7, 2, 3, 4, 9, 0, 1])
전처리 단계로 각각 a
및 b
라는 dataframe의 열에서 그, df
을 ceiving, 우리는과 같이, 배열과 같은 사람들을 추출해야 -
a = df.a.values
b = df.b.values
이 적어도 세 가지 요소를 가정 있습니다 그룹당. 그룹 당 3
개 이하의 경우는 다음 접근법을 읽으십시오.
접근 방법 # 2 : Scipy's binary dilation
와이 b
떨어져 요소를 선택하는 마스크를 만들 수있는 -
from scipy.ndimage.morphology import binary_dilation as imdilate
def filter_lastN(a, b, N):
mask = np.zeros(a.size,dtype=bool)
mask[np.append(np.nonzero(a[1:] > a[:-1])[0],b.size-1)] = 1
return b[imdilate(mask,np.ones(N),origin=(N-1)//2)]
샘플 실행 - 접근이 놀랍
In [198]: a
Out[198]: array([1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3])
In [199]: b
Out[199]: array([5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1])
In [200]: filter_lastN(a,b,3)
Out[200]: array([5, 6, 7, 2, 3, 4, 9, 0, 1])
In [201]: filter_lastN(a,b,5)
Out[201]: array([5, 6, 7, 0, 1, 2, 3, 4, 7, 8, 9, 0, 1])
너무 감사합니다 –