我想找到一种有效的方法来使用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。
答案 0 :(得分:1)
我认为需要DataFrameGroupBy.agg
,然后删除列<b>Filter:</b> <input type="text" ng-model="Filter" id="Filter">
和('condition','sem')
以便将map
转换为MultiIndex
:
columns