2014-09-01 239 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