2017-03-10 251 views
1

我GROUPBY遇到一個問題:大熊貓由字典

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'}} 

東風這樣

code data 
0 a 3 
1 a 4 
2 b 3 
3 c 6 
4 d 7 

我想要的1組,第2組,第3組的平均值。在這個例子中,鍵: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!

回答

3

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 
+1

無需爲'.keys()'這裏... –

+0

@JonClements,是的,謝謝! :) – MaxU