2016-11-04 4 views
1

정말 간단한 해결책이 있다는 것을 확신합니다. 단지 실현하지 못했습니다. 그러나 ...다른 데이터 프레임의 값 목록으로 팬더 데이터 프레임 분할

나는 고주파 데이터의 데이터 프레임을 가지고있다. 이 데이터 프레임을 호출하십시오. A. 또한 저역 경계 지점을 별도로 나열한 목록이 있습니다. A에 타임 스탬프 열이 B [0]과 B [1 사이에있는 경우 1을 표시하는 열을 A에 추가하고 싶습니다. ], B [1]과 B [2] 사이에 있으면 2, 등등.

말했듯이, 그것은 아마도 매우 사소한 일이며, 나는이 사실을 늦게까지 깨닫지 못하고 있습니다.

답변

2

목록 이해력을 사용하는 빠르고 쉬운 방법입니다.

>>> df = pd.DataFrame({'A': np.arange(1, 3, 0.2)}) 

>>> A = df.A.values.tolist() 
A: [1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.5, 2.6, 2.8] 

>>> B = np.arange(0, 3, 1).tolist() 
B: [0, 1, 2] 

>>> BA = [k for k in range(0, len(B)-1) for a in A if (B[k]<=a) & (B[k+1]>a) or (a>max(B))] 
BA: [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 
2

사용 searchsorted : A['timestamp']의 각 값에 대한

A['group'] = B['timestamp'].searchsorted(A['timestamp']) 

는 인덱스 값이 반환됩니다. 이 인덱스는 의 정렬 된 값 중에서 A의 값이 정렬 된 순서를 유지하기 위해 B에 삽입 될 위치를 나타냅니다. 이 B['timestamp'][0] (즉 1.739869) 앞에 오는 때문에 예

,

import numpy as np 
import pandas as pd 
np.random.seed(2016) 

N = 10 
A = pd.DataFrame({'timestamp':np.random.uniform(0, 1, size=N).cumsum()}) 
B = pd.DataFrame({'timestamp':np.random.uniform(0, 3, size=N).cumsum()}) 
# timestamp 
# 0 1.739869 
# 1 2.467790 
# 2 2.863659 
# 3 3.295505 
# 4 5.106419 
# 5 6.872791 
# 6 7.080834 
# 7 9.909320 
# 8 11.027117 
# 9 12.383085 

A['group'] = B['timestamp'].searchsorted(A['timestamp']) 
print(A) 

timestamp group 
0 0.896705  0 
1 1.626945  0 
2 2.410220  1 
3 3.151872  3 
4 3.613962  4 
5 4.256528  4 
6 4.481392  4 
7 5.189938  5 
8 5.937064  5 
9 6.562172  5 

수율을 따라서, 타임 스탬프는 기 0.8967050이다. 2.410220B['timestamp'][0] (즉, 1.739869)보다 크고 B['timestamp'][1] (즉, 2.467790)보다 작기 때문에 그룹 1에 속합니다.


또한 A['timestamp']의 값이 B['timestamp']에서 컷오프 값 중 하나 정확히 같은 경우 수행 할 작업을 결정해야합니다. 당신이 B['timestamp'][i] <= A['timestamp'][i] <= B['timestamp'][i+1]i을 반환 searchsorted하려면

B['timestamp'].searchsorted(A['timestamp'], side='left') 

를 사용합니다. 당신이 그 상황에서 i+1을 반환 searchsorted하려면

B['timestamp'].searchsorted(A['timestamp'], side='right') 

를 사용합니다. side을 지정하지 않으면 기본적으로 side='left'이 사용됩니다.

관련 문제