pandas groupby by the dictionary



我遇到问题:

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

我想要group1,group2,group3的平均值。在此示例中,键:group1匹配值:a,b,因此我在df中发现代码等于a或b。Group1的平均值为(3 4 3)/3

group2 -> 'a','c' -> (3+4+6)/3
group3 -> 'a','b','c','d' ->(3+4+3+6+7)/5

我尝试使用Groupby。它行不通。thx!

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

相关内容

最新更新