在dataframe.groupby(level).agg中传递参数

时间:2017-11-03 15:56:50

标签: python pandas dataframe group-by

我想在分组后计算数据帧上的std。

df2 = df.groupby(level='Index').agg(np.std).dropna(how='all')

一切都很好,但我不知道如何将参数ddof=1传递给np.std

我想在我执行操作的函数中执行此操作...

operation = ['mean','std']
for i in range(0,len(operation)):
    df2 = df.groupby(level='Index').agg(operation[i]).dropna(how='all')
    ....

是否可以将'mean''std'替换为np.meannp.std,其中ddof = 1?

1 个答案:

答案 0 :(得分:1)

更新:

In [298]: df
Out[298]:
     val
idx
0      0
2      2
4      0
1      2
3      0
0      2
0      0
0      0
3      4
2      2

In [299]: def std(x):
     ...:     return np.std(x, ddof=1)
     ...:

In [300]: df.groupby(level=0)['val'].agg(['mean', std]).dropna(how='all')
Out[300]:
     mean       std
idx
0     0.5  1.000000
1     2.0       NaN
2     2.0  0.000000
3     2.0  2.828427
4     0.0       NaN

试试这个:

df2 = df.groupby(level='Index').std(ddof=1).dropna(how='all')

df2 = df.groupby(level='Index').agg(lambda x: np.std(x, ddof=1)).dropna(how='all')

或只是

df2 = df.groupby(level='Index').agg(np.std, ddof=1).dropna(how='all')