2017-05-16 15 views
3

float 유형의 열에서 모든 값을 겹쳐서 쓰레기통에 넣고 싶습니다. 결과 컬럼은 원래 컬럼의 각 값에 대해 하나의 벡터 인 bool이있는 일련의 1-D 벡터 일 수 있습니다. 결과 벡터는 각 bin에 대해 True을 포함하며 다른 bin의 경우 값은 False입니다.팬더를 사용하여 값을 겹치는 상자에 효율적으로 저장하려면 어떻게해야합니까?

예를 들어, 네 개의 빈 [(0, 10), (7, 20), (15, 30), (30, 60)]이 있고 원래 값이 9.5이면 결과 벡터는 [True, True, False, False]이어야합니다.

'apply'를 사용하여 사용자 지정 함수를 사용하여 모든 범위를 반복하는 방법을 알고 있지만 더 효율적이고 간결하게이 binning을 수행 할 수있는 방법이 있습니까?

답변

2

간단한 목록을 통해 귀하의 요구 사항을 충족시킬 수 있습니까?

Bins = [(0, 10), (7, 20), (15, 30), (30, 60)] 
Result = [((9.5>=y[0])&(9.5<=y[1])) for y in Bins] 

를 데이터가 다음 함수를 정의 할 수 팬더 DataFrame (df)의 열 data에 저장되어있는 경우 :

def in_ranges(x,bins): 
    return [((x>=y[0])&(x<=y[1])) for y in bins] 

및 컬럼에 적용 :

df[data].apply(lambda x: pd.Series(in_ranges(x,Bins),Bins)) 
+1

그것을 할 것이다. 고마워요! –

+0

문제 없음 - 상기 편집을 위해서는 판다를 pd로 가져와야합니다. – DrTRD