用pandas groupby在一个df中得到平均值和SEM

时间:2018-03-27 11:44:42

标签: python pandas pandas-groupby

我想找到一种有效的方法来使用pandas中的df.groupby()函数来返回数据框的均值和标准差 - 最好是一次性!

import pandas as PD

df = pd.DataFrame({'case':[1, 1, 2, 2, 3, 3],
                   'condition':[1,2,1,2,1,2],
                   'var_a':[0.92, 0.88, 0.90, 0.79, 0.94, 0.85],
                   'var_b':[0.21, 0.15, 0.1, 0.16, 0.17, 0.23]})

有了这些数据,我想要一种更简单的方法(如果有的话!)来执行以下操作:

grp_means = df.groupby('case', as_index=False).mean()
grp_sems = df.groupby('case', as_index=False).sem()

grp_means.rename(columns={'var_a':'var_a_mean', 'var_b':'var_b_mean'},
                         inplace=True)
grp_sems.rename(columns={'var_a':'var_a_SEM', 'var_b':'var_b_SEM'},
                         inplace=True)

grouped = pd.concat([grp_means, grp_sems[['var_a_SEM', 'var_b_SEM']]], axis=1)

grouped
Out[1]: 
   case  condition  var_a_mean  var_b_mean  var_a_SEM  var_b_SEM
0     1        1.5       0.900        0.18      0.900       0.18
1     2        1.5       0.845        0.13      0.845       0.13
2     3        1.5       0.895        0.20      0.895       0.20

我最近也了解了.agg()函数,并尝试了df.groupby('grouper column') agg('var':'mean', 'var':sem')但这只会返回一个SyntaxError。

1 个答案:

答案 0 :(得分:1)

我认为需要DataFrameGroupBy.agg,然后删除列<b>Filter:</b> <input type="text" ng-model="Filter" id="Filter"> ('condition','sem')以便将map转换为MultiIndex

columns