Почему результаты groupby со средним агрегатом различаются для выборки (frac = 1) и исходных данных? - PullRequest
1 голос
/ 19 сентября 2019

Я не знаю, действительно ли это основной вопрос ..

Так что я играл с Groupby, агрегировал и делал выборки с использованием Pandas .. с этим файлом sample.csv https://sendeyo.com/en/a36d65b2a7

Вот результаты исходной группы данных с использованием среднего агрегата ('i' - это DataFrame):

    test1 = i.groupby('State')[["Precipitation","Speed"]].mean() 
    test1.head(5)

                  Precipitation     Speed
     State                              
    Alabama          0.925000       5.891875
    Alaska           0.488824       8.630924
    Arizona          0.234000       4.015500
    Arkansas         0.380833       4.372500
    California       1.017763       4.192895

А затем вот результаты данных с использованием выборки (frac = 1, replace =Правда) с помощью группового среднего значения:

    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

Но я не могу понять и принять эти результаты, вот мое понимание:

Моя концепция понимания, образец (frac = 1, replace = True) создает DataFrame со 100% выборкой DataFrame с рандомизированным индексом (replace = True), и я думал, что это похоже на рандомизированный индексный DataFrame, так что я ожидал, что среднее по группамОригинал и выборка должны быть одинаковыми.

И мой вопрос такой:

Но результаты показывают разницу?Может кто-нибудь объяснить мне, почему это может произойти? .. Я знаю, что много исследований с использованием этих методов для Bootstrap Analysis, (поэтому этот вопрос только для того, чтобы уточнить, как работает агрегат и сгруппированный для этого случая)

(Примечание. Конечно, я принимаю, если это другой случай, например: при использовании ГРП ниже 1, это означает, что в выборке просто используется пропорция DF (ниже 100%), поэтому ясно, если результаты будут отличаться)

1 Ответ

1 голос
/ 19 сентября 2019

Спасибо @Chris за отзыв !, этот минималистичный график показывает, что

replace = True

действительно дает эффекты распределения выборки даже немного, это делаетсмысл как метод Bootstrap:

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)

Original vs No Replace

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)

Original vs With Replace

...