2013-03-29 4 views

답변

3

호 회 다음 "K1"및 ("K1", "K2")을위한 div 할 GROUPBY :

import pandas as pd 
k1 = ["a", "a", "a", "a", "b", "b", "b"] 
k2 = ["x", "x", "y", "y", "x", "y", "y"] 
df = pd.DataFrame({"k1":k1, "k2":k2}) 

df.groupby(["k1", "k2"]).k2.count().div(
    df.groupby("k1").k1.count().astype(float), level=0) 

출력 :

k1 k2 
a x  0.500000 
    y  0.500000 
b x  0.333333 
    y  0.666667 
6

여기 하나 GROUPBY를 사용하는 다른 방법이다 성명서.

k1을 그룹화하고 k2 열을 선택하고 람다 함수를 적용하십시오. 람다는 K1에서 K2 의 각 수준에 대한 주파수의 수를 가져온 다음 우리는 K1의 수에 의해 분할 :

In [1]: df.groupby('k1')['k2'].apply(lambda x: pd.value_counts(x)/x.count().astype(float)) 

Out[1]: 
k1 
a x 0.500000 
    y 0.500000 
b y 0.666667 
    x 0.333333 

성능 :

HYRY의 방법

100 loops, best of 3: 3.07 ms per loop 

내 방법 :

1000 loops, best of 3: 1.98 ms per loop 
+0

고마워요, 제가 찾고있는 것이 었습니다. – gus

+0

안녕하세요, 이것이 당신이 찾고 있던 대답이라면 받아들이는 데 도움이 될 것입니다. – Will

관련 문제