2014-11-13 4 views
0

I이 장난감 예처럼 든 보이는 셋있다 : I가있는 숫자에 따라 다른 비닝 범위를 이용하여, 빈 데이터를 싶습니다빈 데이터 분리 칼럼의 값에 따라

s1 = pd.Series(np.random.rand(5)) 
s2 = pd.Series(np.random.rand(5) * 10) 
cat1 = pd.Series(['s1'] * 5) 
cat2 = pd.Series(['s2'] * 5) 
s = s1.append(s2).reset_index(drop=True) 
c = cat1.append(cat2).reset_index(drop=True) 
data = pd.DataFrame({'cat': c,'s': s}) 
print data 

    cat     s 
0 s1     0.68 
1 s1     0.61 
2 s1     0.43 
3 s1     0.68 
4 s1     0.11 
5 s2     4.82 
6 s2     8.19 
7 s2     3.88 
8 s2     5.51 
9 s2     1.20 

을 컬럼 cat. 이것은 내가 뭘하려 :

def bucketing_fun(x, cat): 
    if cat == 's1': 
     return np.digitize([x], s1_buckets)[0] 
    else: 
     return np.digitize([x], s2_buckets)[0] 

data['Buckets'] = data[['s', 'cat']].apply(lambda x: bucketing_fun(x[0], x[1]), axis=1) 
print data 

이 작동하지만 난에 대한 0.5mn 행이 실제 데이터 세트에 성능 문제가 있습니다.

답변

1
당신은 아마 벡터화 속도 향상에 밖으로 잃고

이 시도 :

buckets = dict(s1=s1_buckets, s2=s2_buckets) 
data['Buckets'] = data.groupby(['cat']).apply(lambda df: np.digitize(df.s, buckets[df.cat.irow(0)])) 
관련 문제