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