2017-04-15 7 views
1

그래서 bin (분류)하고 새로운 기능을 만들기 위해 결합하고자하는 두 세트의 기능이 있습니다. 지도상의 좌표를 그리드로 분류하는 것과 다르지 않습니다.팬더로 2 차원 비닝

문제는 기능이 균등하게 분산되어 있지 않으므로 두 기능/좌표 모두에서 비닝 (예 : pandas.qcut()) 할 때 quantile을 사용하고 싶습니다.

두 기능 모두에서 을 수행 한 다음 결과 레이블을 연결하는 것보다 나은 방법이 있습니까?

+0

나는 생각할 수 없다. 그것을하는 절대적인 적절한 방법 인 것 같습니다. 더 나은 기능은 내장 기능을 갖는 것입니다. – piRSquared

+0

내가 틀렸어. 내가 더 좋아할만한 것이있다. – piRSquared

+0

나는 진지하게 기다리고있다 ... –

답변

1

카톤 제품을 범주 형으로 작성하십시오.

는 dataframe을 고려 df

df = pd.DataFrame(dict(A=np.random.rand(20), B=np.random.rand(20))) 

      A   B 
0 0.538186 0.038985 
1 0.185523 0.438329 
2 0.652151 0.067359 
3 0.746060 0.774688 
4 0.373741 0.009526 
5 0.603536 0.149733 
6 0.775801 0.585309 
7 0.091238 0.811828 
8 0.504035 0.639003 
9 0.671320 0.132974 
10 0.619939 0.883372 
11 0.301644 0.882258 
12 0.956463 0.391942 
13 0.702457 0.099619 
14 0.367810 0.071612 
15 0.454935 0.651631 
16 0.882029 0.015642 
17 0.880251 0.348386 
18 0.496250 0.606346 
19 0.805688 0.401578 

우리는 당신은 튜플과 범주 데카르트 제품을 만들 수 있습니다 pd.qcut

d1 = df.assign(
    A_cut=pd.qcut(df.A, 2, labels=[1, 2]), 
    B_cut=pd.qcut(df.B, 2, labels=list('ab')) 
) 

      A   B A_cut B_cut 
0 0.538186 0.038985  1  a 
1 0.185523 0.438329  1  b 
2 0.652151 0.067359  2  a 
3 0.746060 0.774688  2  b 
4 0.373741 0.009526  1  a 
5 0.603536 0.149733  1  a 
6 0.775801 0.585309  2  b 
7 0.091238 0.811828  1  b 
8 0.504035 0.639003  1  b 
9 0.671320 0.132974  2  a 
10 0.619939 0.883372  2  b 
11 0.301644 0.882258  1  b 
12 0.956463 0.391942  2  a 
13 0.702457 0.099619  2  a 
14 0.367810 0.071612  1  a 
15 0.454935 0.651631  1  b 
16 0.882029 0.015642  2  a 
17 0.880251 0.348386  2  a 
18 0.496250 0.606346  1  b 
19 0.805688 0.401578  2  b 

새로운 categoricals을 만들 수 있습니다

d2 = d1.assign(cartesian=pd.Categorical(d1.filter(regex='_cut').apply(tuple, 1))) 
print(d2) 

      A   B A_cut B_cut cartesian 
0 0.538186 0.038985  1  a (1, a) 
1 0.185523 0.438329  1  b (1, b) 
2 0.652151 0.067359  2  a (2, a) 
3 0.746060 0.774688  2  b (2, b) 
4 0.373741 0.009526  1  a (1, a) 
5 0.603536 0.149733  1  a (1, a) 
6 0.775801 0.585309  2  b (2, b) 
7 0.091238 0.811828  1  b (1, b) 
8 0.504035 0.639003  1  b (1, b) 
9 0.671320 0.132974  2  a (2, a) 
10 0.619939 0.883372  2  b (2, b) 
11 0.301644 0.882258  1  b (1, b) 
12 0.956463 0.391942  2  a (2, a) 
13 0.702457 0.099619  2  a (2, a) 
14 0.367810 0.071612  1  a (1, a) 
15 0.454935 0.651631  1  b (1, b) 
16 0.882029 0.015642  2  a (2, a) 
17 0.880251 0.348386  2  a (2, a) 
18 0.496250 0.606346  1  b (1, b) 
19 0.805688 0.401578  2  b (2, b) 

당신이 그렇게 생각한다면, 당신은 그들에게 명령을 내릴 수 있습니다.

+0

좋아 보인다. 감사! 다른 챌린저가없는 경우 합리적인 기간 내에이 답변을 수락합니다. –

+0

@ReubenL. 천만에요 – piRSquared