2014-09-01 5 views
0

집합에 따라 그룹화하는 더 빠른 방법이 있는지 궁금합니다.집합에 따른 팬더 df 그룹

import pandas as pd 
col1 = 'ABCDE' 
col2 = range(5,10) 
df = pd.DataFrame(zip(col1,col2), columns=('x','y')) 

row_groups = {'foo':set('ABC'), 'bar':set('DE')} 

나는 현재의 형태에서 데이터 프레임을 변경하려면 :

x y      y 
0 A 5   group_name 
1 B 6   foo   18 
2 C 7 ==> bar   17 
3 D 8 
4 E 9 

이 그룹을 대표하는 두 번째 데이터 프레임을 만드는 것이었다 내가 한 방법은, 두 개의 데이터를 병합 다음 동작이다 프레임의 행 그룹 이름으로 그룹 및 합계 목표 출력 산출

row_groups_df = pd.DataFrame(zip('ABCDE',['foo']*3 + ['bar']*2), 
          columns=('x','group_name')) 
merged_df = pd.merge(df, row_groups_df) 
output_df = merged_df.groupby(['group_name']).sum() 

:

을 0
  y 
group_name 
bar  17 
foo  18 

답변

0

것이 가장 좋은 방법인지 잘 모르겠지만, 당신이 할 수 있습니다 :

df.groupby('x', axis = 0).sum()\ 
    .groupby(lambda x: (k for k,v in row_groups.iteritems() if x in v).next()).sum() 

또는 df.groupby('x', axis = 0).sum()df.set_index('x')로 교체 : 출력이 요구 될 때

df.set_index('x').\ 
    groupby(lambda x: (k for k,v in row_groups.iteritems() if x in v).next()).sum() 

:

 y 
bar 17 
foo 18