Python 按集合分组

Python 按集合分组,python,pandas,Python,Pandas,我想知道是否有一种更快的方法可以根据集合进行分组。操作如下: 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

我想知道是否有一种更快的方法可以根据集合进行分组。操作如下:

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

我不知道这是否是最好的方法,但你可以这样做:

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\u index('x')

输出符合要求:

      y
bar  17
foo  18
      y
bar  17
foo  18