2016-09-04 7 views
2

나는 이와 같은 데이터 프레임을 가지고 있습니다.팬더의 멀티 인덱스 데이터 프레임 그룹핑 및 합계

df1=pd.DataFrame({"A":np.random.randint(1,10,4),"B":np.random.randint(1,10,4),"C":list('abba')}) 
df1.index.name="first"  
df2=pd.DataFrame({"A":np.random.randint(1,10,5),"B":np.random.randint(1,10,5),"C":list('aaabb')}) 
df2.index.name="second" 
df=pd.concat([df1,df2], keys=['first', 'second']) 
df 
      A B C 
first 0 6 5 a 
     1 2 2 b 
     2 1 6 b 
     3 6 9 a 
second 0 6 6 a 
     1 9 9 a 
     2 8 4 a 
     3 7 2 b 
     4 9 8 b 

나는 이와 같은 그룹화 및 합산 결과를 얻고 싶습니다. 제 (키 = 열 "C")는

first  second 
    A  B  A  B 
a 15  14 23  19 
b 3  8  16  10 

어떻게이 결과를 얻을 수 있습니다

? 이 작업을 수행하는

답변

2

. 인덱스의 첫 번째 레벨과 열 'C'을 사용하려고합니다.

df.groupby([df.index.get_level_values(0), df.C]).sum() \ 
    .unstack().stack(0).T.rename_axis(None) 

enter image description here

0

한 가지 방법은 다음과 같습니다 당신은 배열처럼 보이는 것들의 목록을 groupby을 사용할 수 있습니다

In [126]: df1=pd.DataFrame({"A":np.random.randint(1,10,4),"B":np.random.randint(1,10,4),"C":list('abba')}) 

In [127]: df2=pd.DataFrame({"A":np.random.randint(1,10,5),"B":np.random.randint(1,10,5),"C":list('aaabb')}) 

In [128]: df1 
Out[128]: 
    A B C 
0 7 9 a 
1 1 3 b 
2 7 7 b 
3 1 2 a 

In [129]: df2 
Out[129]: 
    A B C 
0 3 1 a 
1 3 1 a 
2 7 3 a 
3 9 7 b 
4 9 1 b 

In [130]: df = pd.concat({"first": df1.groupby('C').sum(), "second": df2.groupby('C').sum()}, axis = 1) 

In [131]: del df.index.name 

In [132]: df 
Out[132]: 
    first  second 
     A B  A B 
a  8 11  13 5 
b  8 10  18 8 
관련 문제