2017-02-20 6 views
1

나는 팬더 dataframes에 대한 질문이 : 나는 다음과 같은 dataframe을팬더 Dataframe GROUPBY : 더블 GROUPBY 및 적용 기능

,

df = pd.DataFrame([[1,1,10],[1,1,30],[1,2,40],[2,3,50],[2,3,150],[2,4,100]],columns=["a","b","c"]) 

    a b c 
0 1 1 10 
1 1 1 30 
2 1 2 40 
3 2 3 50 
4 2 3 150 
5 2 4 100 

을 그리고 난, 다음과 같은 출력을 생성 할

    : 첫 번째 라인은 다음과 같이 계산된다
    a "new col" 
    0 1 30 
    1 2 100 
    

  1. 그룹
  2. 다음 그룹마다 분류 개체은 "B"
  3. 모든 B-groupbs 수단을 계산이 B 그룹
  4. 대한 "C"의 평균을 계산 첫번째 열 "A"에 의해 DF 하나의 "가"
  5. 이 하나 "새로운 COL"에 저장된 최종 값이다 "는"

나는이 어떻게 든 혼란 상상할 수 있지만이 그럼에도 불구하고, 이해할 수 있기를 바랍니다.

내가 원하는 결과를 달성,하지만 난 거대한 dataframe을 위해 그것을 필요로하는, 내 솔루션은 내가 무엇을해야하는 (?) DF 같은 것입니다, 따라서, 아마

pd.DataFrame([ [a, adata.groupby("b").agg({"c": lambda x:x.mean()}).mean()[0]] for a,adata in df.groupby("a") ],columns=["a","new col"]) 
    a new col 
0 1  30.0 
1 2 100.0 

둔화 많이 있습니다. groupby ("a"). groupby ("b") [ "c"] 평균()

미리 감사드립니다.

답변

2

여기에 한 가지 방법

In [101]: (df.groupby(['a', 'b'], as_index=False)['c'].mean() 
      .groupby('a', as_index=False)['c'].mean() 
      .rename(columns={'c': 'new col'})) 
Out[101]: 
    a new col 
0 1  30 
1 2  100 
1
df.groupby(['a','b']).mean().reset_index().groupby('a').mean() 
Out[117]: 
    b  c 
a    
1 1.5 30.0 
2 3.5 100.0 
2
In [57]: df.groupby(['a','b'])['c'].mean().mean(level=0).reset_index() 
Out[57]: 
    a c 
0 1 30 
1 2 100 
입니다