Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对GroupBy对象使用apply和agg时,pandas会给出不同的数值结果_Python_Python 3.x_Pandas_Dataframe_Numpy - Fatal编程技术网

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
默认值。我不知道替换是如何完成的,但这可以解释不同的行为。