我正在尝试在熊猫中找到GroupBy对象的某些列的min
,max
,mean
,sum
和std
。为此,我的原始代码是这样的:
df_agg = df.groupby('id')[column_list].agg(['mean', 'max', 'min', 'sum', 'std'])
但这在NaN
列中产生了许多std
。搜索时,我found that std
接受一个参数-ddof
(自由度增量)-默认情况下设置为1。这导致除以0的错误并给出了这些NaN
值。
现在,我想在以上代码中使用的ddof=0
中发送参数std
,但我不知道该怎么做。
请帮助。
答案 0 :(得分:1)
您可以创建自定义lambda函数:
f = lambda x: x.std(ddof=0)
f.__name__ = 'std_0'
df_agg = df.groupby('id')[column_list].agg(['mean', 'max', 'min', 'sum', f])
示例:
df = pd.DataFrame({'A':list('abcdef'),
'B':[4,5,4,5,5,4],
'C':[7,8,9,4,2,3],
'D':[1,3,5,7,1,0],
'E':[5,3,6,9,2,4],
'id':list('aaabbb')})
print (df)
A B C D E id
0 a 4 7 1 5 a
1 b 5 8 3 3 a
2 c 4 9 5 6 a
3 d 5 4 7 9 b
4 e 5 2 1 2 b
5 f 4 3 0 4 b
column_list = ['C','D','E']
f = lambda x: x.std(ddof=0)
f.__name__ = 'std_0'
df_agg = df.groupby('id')[column_list].agg(['mean', 'max', 'min', 'sum', f])
print (df_agg)
C D E \
mean max min sum std_0 mean max min sum std_0 mean max
id
a 8 9 7 24 0.816497 3.000000 5 1 9 1.632993 4.666667 6
b 3 4 2 9 0.816497 2.666667 7 0 8 3.091206 5.000000 9
min sum std_0
id
a 3 14 1.247219
b 2 15 2.943920