2017-12-18 3 views
-1

데이터 프레임에 20 개의 열이 있습니다. I는 예를 들어 여기에 4 목록 :팬더 데이터 프레임의 여러 열을 기준으로 백분율을 계산하는 방법은 무엇입니까?

is_guarantee : 0 또는 1
hotel_star : 0, 1, 2, 3, 4, 5
ORDER_STATUS : 40, 60, 80
여행 (라벨)

012,351,641 : 0, 1, 2

Click to View Image

is_guarantee hotel_star order_status journey 
0    0   5   60  0 
1    1   5   60  0 
2    1   5   60  0 
3    0   5   60  1 
4    0   4   40  0 
5    0   4   40  1 
6    0   4   40  1 
7    0   3   60  0 
8    0   2   60  0 
9    1   5   60  0 
10    0   2   60  0 
11    0   2   60  0 
그러나 시스템은 입력 함수의 형식은 다음과 같이 발생 행렬 필요

Click to View Image

신체가 도움이 될 수 있습니까? 내가 생각

df1 = pd.DataFrame(index=range(0,20)) 
df1['is_guarantee'] = np.random.choice([0,1], df1.shape[0]) 
df1['hotel_star'] = np.random.choice([0,1,2,3,4,5], df1.shape[0]) 
df1['order_status'] = np.random.choice([40,60,80], df1.shape[0]) 
df1['journey '] = np.random.choice([0,1,2], df1.shape[0]) 
+1

지금까지 해보신 것은 무엇입니까? –

+0

질문에서 편집 한 데이터를 _ 텍스트 _로보고 싶습니다. 내 터미널에 그림을 복사하여 붙여 넣을 수 없으며 처음부터 입력하지 않아도됩니다. 모든 사람의 삶을 편하게하고 질문에 예상되는 결과물을 텍스트로 게시하십시오. 데이터 없음 = 도움 없음. –

+0

@jezrael ... 아무도 나를 박해하기 위해 여기에 있습니다. 나는 당신의 지식 성을 존중한다고 말했습니다. 불행히도 때로는 사이트에서 건강에 좋지 않은 것으로 간주 될 수있는 일을하는 경우가 있습니다. 그건 내 생각이 아니야. 어쨌든 나는 질문을 재개하고 즐긴다. –

답변

1

당신이 필요합니다 다음 행 당 금액을 분할하고 가입 unstack

  • 에 의해 재편,

    • 모양 변경 melt에 의해 sizegroupby로 카운트를 얻을 MultiIndexindex에 :

    df = (df.melt('journey') 
         .astype(str) 
         .groupby(['variable', 'journey','value']) 
         .size() 
         .unstack(1, fill_value=0)) 
    
    df = (df.div(df.sum(1), axis=0) 
         .mul(100) 
         .add_prefix('journey_') 
         .set_index(df.index.map(' = '.join)) 
         .rename_axis(None, 1)) 
    
    print (df) 
    
            journey_0 journey_1 
    hotel_star = 2  100.000000 0.000000 
    hotel_star = 3  100.000000 0.000000 
    hotel_star = 4  33.333333 66.666667 
    hotel_star = 5  80.000000 20.000000 
    is_guarantee = 0 66.666667 33.333333 
    is_guarantee = 1 100.000000 0.000000 
    order_status = 40 33.333333 66.666667 
    order_status = 60 88.888889 11.111111 
    
  • +0

    고마워요! 내가 그것을 공부하자 :) – DataHolic

    관련 문제