Pandas 按字典分组

Pandas 按字典分组,pandas,dictionary,group-by,Pandas,Dictionary,Group By,我遇到一个问题: import pandas df=pandas.DataFrame({"code":['a','a','b','c','d'], 'data':[3,4,3,6,7],}) mat={'group1':['a','b'],'group2':['a','c'],'group3':{'a','b','c','d'}} df是这样的 code data 0 a 3 1 a 4 2 b 3 3 c 6 4 d

我遇到一个问题:

import pandas
df=pandas.DataFrame({"code":['a','a','b','c','d'],
                'data':[3,4,3,6,7],})
mat={'group1':['a','b'],'group2':['a','c'],'group3':{'a','b','c','d'}}
df是这样的

  code  data
0   a   3
1   a   4
2   b   3
3   c   6
4   d   7
我想知道第一组,第二组,第三组的平均值。在本例中,key:group1与值a、b匹配,因此我发现df中的代码等于a或b。第1组的平均值为(3+4+3)/3

我尝试使用groupby。它不起作用。
谢谢

IIUC您可以执行如下操作:

In [133]: rules = {
     ...:   'grp1': ['a','b'],
     ...:   'grp2': ['a','c'],
     ...:   'grp3': list('abcd')
     ...: }
     ...:
     ...: r = pd.DataFrame(
     ...:     [{r:df.loc[df.code.isin(rules[r]), 'data'].mean()}
     ...:      for r in rules
     ...:     ]
     ...: ).stack()
     ...:

In [134]: r
Out[134]:
0  grp1    3.333333
1  grp2    4.333333
2  grp3    4.600000
dtype: float64
In [133]: rules = {
     ...:   'grp1': ['a','b'],
     ...:   'grp2': ['a','c'],
     ...:   'grp3': list('abcd')
     ...: }
     ...:
     ...: r = pd.DataFrame(
     ...:     [{r:df.loc[df.code.isin(rules[r]), 'data'].mean()}
     ...:      for r in rules
     ...:     ]
     ...: ).stack()
     ...:

In [134]: r
Out[134]:
0  grp1    3.333333
1  grp2    4.333333
2  grp3    4.600000
dtype: float64