Python 对GroupBy对象使用apply和agg时,pandas会给出不同的数值结果
我发现如果我们将Python 对GroupBy对象使用apply和agg时,pandas会给出不同的数值结果,python,python-3.x,pandas,dataframe,numpy,Python,Python 3.x,Pandas,Dataframe,Numpy,我发现如果我们将np.var传递给apply,它会计算总体方差,但如果我们将np.var传递给agg,它会计算样本方差,如下例所示: np.random.seed(1) df=pd.DataFrame({'category':list(“a”*4+“b”*4),'data':np.arange(8),'weights':np.random.rand(8)}) df #类别数据权重 #0 a 0.417022 #1A 10.720324 #2 a 2 0.000114 #3 a 3 0.30233
np.var
传递给apply
,它会计算总体方差,但如果我们将np.var
传递给agg
,它会计算样本方差,如下例所示:
np.random.seed(1)
df=pd.DataFrame({'category':list(“a”*4+“b”*4),'data':np.arange(8),'weights':np.random.rand(8)})
df
#类别数据权重
#0 a 0.417022
#1A 10.720324
#2 a 2 0.000114
#3 a 3 0.302333
#4 b 4 0.146756
#5 b 5 0.092339
#6b 60.186260
#7 b 7 0.345561
打印(df.groupby('category')。应用(np.var))#总体方差
#数据权重
#类别
#a 1.25 0.066482
#b 1.25 0.008898
打印(df.groupby('category').agg(np.var))#样本方差
#数据权重
#类别
#a 1.666667 0.088643
#b 1.666667 0.011864
有人能告诉我为什么np.var不能给出一致的结果吗?非常感谢 您可以使用ddof使答案一致
print(df.groupby('category').apply(np.var) ) # population variance
data weights
category
a 1.25 0.066482
b 1.25 0.008898
print(df.groupby('category').agg(lambda x: np.var(x, ddof=0)) ) # population variance
data weights
category
a 1.25 0.066482
b 1.25 0.008898
print(df.groupby('category').agg(np.var) ) # sample variance
data weights
category
a 1.666667 0.088643
b 1.666667 0.011864
print(df.groupby('category').apply(lambda x: np.var(x, ddof=1)) ) # sample variance
data weights
category
a 1.666667 0.088643
b 1.666667 0.011864
阅读更多关于它的文章
=================
也可以直接使用groupby的.var()
df.groupby('category').var()
data weights
category
a 1.666667 0.088643
b 1.666667 0.011864
非常感谢您的回复。是的,我知道
ddof
参数。我只是想知道熊猫在将np.var
传递给apply
和agg
时使用不同的ddof
设置是一个bug还是一个功能?pandas.DataFrame.aggregate
文档说它是特殊情况下的numpy函数,比如mean
和var
。查看它的代码,我看到一个var
部分,它有一个ddof=1
默认值。我不知道替换是如何完成的,但这可以解释不同的行为。