2016-06-14 2 views
4

평가 항목의 조건부 조건부 ('A', 'B', 'C')를 계산하고 싶습니다.데이터 프레임 pandas-python에서 조건부 확률 값을 계산하는 방법은 무엇입니까?

company  model rating type 
0 ford  mustang  A  coupe 
1 chevy  camaro  B  coupe 
2 ford  fiesta  C  sedan 
3 ford  focus  A  sedan 
4 ford  taurus  B  sedan 
5 toyota  camry  B  sedan 

출력 :

Prob(rating=A) = 0.333333 
Prob(rating=B) = 0.500000 
Prob(rating=C) = 0.166667 

Prob(type=coupe|rating=A) = 0.500000 
Prob(type=sedan|rating=A) = 0.500000 
Prob(type=coupe|rating=B) = 0.333333 
Prob(type=sedan|rating=B) = 0.666667 
Prob(type=coupe|rating=C) = 0.000000 
Prob(type=sedan|rating=C) = 1.000000 

어떤 도움이, 감사합니다 .. !!

+1

아니라, 단지 :) 그것을 할. 'Prob (타입 = 쿠페 = 평가 = A) = Prob (쿠페 = 타입 및 등급 = A)/Prob (등급 = A)'. – cel

답변

0

당신은 groupby 사용할 수 있습니다 : 당신은 .groupby()를 사용할 수 있습니다

In [2]: df = pd.DataFrame({'company': ['ford', 'chevy', 'ford', 'ford', 'ford', 'toyota'], 
        'model': ['mustang', 'camaro', 'fiesta', 'focus', 'taurus', 'camry'], 
        'rating': ['A', 'B', 'C', 'A', 'B', 'B'], 
        'type': ['coupe', 'coupe', 'sedan', 'sedan', 'sedan', 'sedan']}) 

In [3]: df.groupby('rating').count()['model']/len(df) 
Out[3]: 
rating 
A 0.333333 
B 0.500000 
C 0.166667 
Name: model, dtype: float64 

In [4]: (df.groupby(['rating', 'type']).count()/df.groupby('rating').count())['model'] 
Out[4]: 
rating type 
A  coupe 0.500000 
     sedan 0.500000 
B  coupe 0.333333 
     sedan 0.666667 
C  sedan 1.000000 
Name: model, dtype: float64 
5

내장 .div() :

rating_probs = df.groupby('rating').size().div(len(df)) 

rating 
A 0.333333 
B 0.500000 
C 0.166667 

및 조건 probs :

df.groupby(['type', 'rating']).size().div(len(df)).div(rating_probs, axis=0, level='rating') 

coupe A   0.500000 
     B   0.333333 
sedan A   0.500000 
     B   0.666667 
     C   1.000000 
+0

'level' 매개 변수는 0이 아니라 1이어야한다고 생각합니다. – Patthebug

+0

시도해 보셨습니까? 위의 작업 버전을'level = 0'으로 변경할 때 누락 된 값을 얻습니다. 'rating_probs'는 레벨 1 인'rating' 레벨과 정렬되어야합니다.'level = 1'을'level = 'rating''으로 변경하면 왜 이것이 더 잘 작동하는지 알 수 있습니다. 그에 따라 편집되었습니다. – Stefan

+0

흥미 롭습니다. 나는 level = 1로 결과를 얻고 있었지만 그 결과는 정확하지 않았습니다. 'level = 0'으로 변경하면 정확한 조건 확률 값을 얻을 수 있습니다. – Patthebug

3

당신은 reindex를 추가 할 필요가 추가로 0 값을 입력하십시오. g 쌍 :

mux = pd.MultiIndex.from_product([df['rating'].unique(), df['type'].unique()]) 
s = (df.groupby(['rating', 'type']).count()/df.groupby('rating').count())['model'] 
s = s.reindex(mux, fill_value=0) 
print (s) 
A coupe 0.500000 
    sedan 0.500000 
B coupe 0.333333 
    sedan 0.666667 
C coupe 0.000000 
    sedan 1.000000 
Name: model, dtype: float64 

그리고 다른 해결책, 감사 Zero :

s.unstack(fill_value=0).stack() 
+0

's.unstack (fill_value = 0). 스택()'은 아마도해야할까요? – Zero

관련 문제