2014-07-07 6 views
1

나는 두 개의 팬더 데이터 프레임 A와 B를 가지고 있는데, 열 수는 같고 행 수는 같지 않습니다. ['start', 'end', 'value']입니다. B의 복수 행의 가능성이있다팬더에서 겹치는 세그먼트 찾기

A.iloc(i) = B['value'][B['start'] < A[i,'start'] & B['end'] > A[i,'end']] 

각 I이 조건을 만족하는 경우, 최대 또는 대응하는 행의 합이 될 것이다 : 다음 I는 각 행에 대한 값을 설정하려는 결과. 아무도 A.iloc[i]의 값을 만족시키지 못하는 경우 업데이트하거나 기본값 0으로 설정하면 안됩니다 (어느 쪽이든 괜찮을 것입니다)

이 작업을 수행하는 가장 효율적인 방법을 찾는 데 관심이 있습니다.

+0

부울 조건에 따라 데이터 프레임 A의 값 열을 설정 하시겠습니까? – EdChum

+0

@EdChum 예, A와 B의 행 수가 동일하지 않습니다. – user51291

+0

새 의견으로 질문을 업데이트 할 수 있습니까? 더 명확하게 설명하고 적은 수의 상황에서 행을 병합하는 방법을 설명하십시오. 덕분에 A 또는 B의 행 – EdChum

답변

0
import numpy as np 
np.random.seed(1) 
lenB = 10 
lenA = 20 
B_start = np.random.rand(lenB) 
B_end = B_start + np.random.rand(lenB) 
B_value = np.random.randint(100, 200, lenB) 

A_start = np.random.rand(lenA) 
A_end = A_start + np.random.rand(lenA) 

#if you use dataframe 
#B_start = B["start"].values 
#B_end = ... 

mask = (A_start[:, None ] > B_start) & (A_end[:, None] < B_end) 
r, c = np.where(mask) 
result = pd.Series(B_value[c]).groupby(r).max() 
print result 
+0

감사합니다. 솔루션은 우아하지만 대형 어레이의 경우 메모리 공간이 큽니다. – user51291