2014-09-01 280 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() 

其產生期望的輸出:

  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