Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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 3.x 为什么样本(frac=1)和原始数据之间的平均聚合groupby结果不同?_Python 3.x_Pandas_Aggregate_Pandas Groupby - Fatal编程技术网

Python 3.x 为什么样本(frac=1)和原始数据之间的平均聚合groupby结果不同?

Python 3.x 为什么样本(frac=1)和原始数据之间的平均聚合groupby结果不同?,python-3.x,pandas,aggregate,pandas-groupby,Python 3.x,Pandas,Aggregate,Pandas Groupby,我不知道这是否真的是一个基本问题 所以我一直在玩Groupby,用熊猫进行聚合和取样。。使用此sample.csv文件 以下是原始数据分组的结果,使用平均聚合('i'这里是数据帧): 然后,这里是使用平均聚合的样本(frac=1,replace=True)分组的数据结果: i_sampling = i[["Precipitation","Speed","State"]].sample(frac=1,replace=True) test2 = i_sampling.groupby

我不知道这是否真的是一个基本问题

所以我一直在玩Groupby,用熊猫进行聚合和取样。。使用此sample.csv文件

以下是原始数据分组的结果,使用平均聚合('i'这里是数据帧):

然后,这里是使用平均聚合的样本(frac=1,replace=True)分组的数据结果:

    i_sampling = i[["Precipitation","Speed","State"]].sample(frac=1,replace=True)
    test2 = i_sampling.groupby('State')[["Precipitation","Speed"]].mean()
    test2.head(5)

                   Precipitation     Speed
    State                              
    Alabama          0.810588       5.951765
    Alaska           0.416984       9.862222
    Arizona          0.082500       3.581875
    Arkansas         0.494118       3.469412
    California       1.103448       3.536207
但我无法理解并接受这些结果,以下是我的理解:

我的理解,sample(frac=1,replace=True)的概念是制作一个数据帧,该数据帧具有100%的随机索引的数据帧样本(replace=True),我认为这就像是一个随机索引数据帧,所以我希望groupby原始和采样的平均值必须相同

我的问题是:

但是结果显示出了差异?有人能解释一下为什么会发生这种情况吗?。。我知道很多研究使用这些方法进行引导分析(所以这个问题只是为了澄清聚合和groupby在这个案例中是如何工作的)


(注意:如果是不同的情况,我当然接受,例如:使用低于1的分形,这意味着样本只使用DF的一部分(低于100%),因此如果结果不同,则很明显)

谢谢@Chris的反馈!,这个极简主义的情节表明

替换=真

确实会对样本分布产生一点点影响,这对于引导方法来说是有意义的:

i_sampling_true = i[["Precipitation","Speed","State"]].sample(frac=1,replace=True)
i_sampling_false = i[["Precipitation","Speed","State"]].sample(frac=1,replace=False)

def dataframe_distplot(df, col, rug=True, hist=False, title_df="Title DF", color="Red", axes="None"):
     if axes == "None": sns.distplot(df[col], color=color, rug=rug, hist=hist).set_title(title_df)
     else: sns.distplot(df[col], ax=axes, color=color, rug=rug, hist=hist).set_title(title_df)

ax = dataframe_distplot(i, "Precipitation", True, False, title_df="Dist Plot Original vs Replace=False")
dataframe_distplot(i_sampling_false, "Precipitation", True, False, title_df="Dist Plot Original vs Replace=False",color="blue", axes=ax)


不确定这里是否是这种情况,但通常您需要在执行groupby.remove
replace=True
之前对数据进行排序,然后它们将变得相同。@Chris,好的,所以当replace=False时它已修复:o,谢谢!所以,我想知道replace=True是如何工作的?您选择一个样本,保留它,但将其替换回池中。理论上,您可能会得到所有相同的行。这就是替换的定义
i_sampling_true = i[["Precipitation","Speed","State"]].sample(frac=1,replace=True)
i_sampling_false = i[["Precipitation","Speed","State"]].sample(frac=1,replace=False)

def dataframe_distplot(df, col, rug=True, hist=False, title_df="Title DF", color="Red", axes="None"):
     if axes == "None": sns.distplot(df[col], color=color, rug=rug, hist=hist).set_title(title_df)
     else: sns.distplot(df[col], ax=axes, color=color, rug=rug, hist=hist).set_title(title_df)

ax = dataframe_distplot(i, "Precipitation", True, False, title_df="Dist Plot Original vs Replace=False")
dataframe_distplot(i_sampling_false, "Precipitation", True, False, title_df="Dist Plot Original vs Replace=False",color="blue", axes=ax)
ax = dataframe_distplot(i, "Precipitation", True, False, title_df="Dist Plot Original vs Replace=True")
dataframe_distplot(i_sampling_true, "Precipitation", True, False, title_df="Dist Plot Original vs Replace=True",color="yellow", axes=ax)