Более эффективный способ агрегирования случайной выборки из pandas фрейма данных и итеративного добавления среднего значения выборки df в пустой фрейм данных - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь извлечь случайную выборку из моего df, взять среднее значение всех столбцов в одной серии строк, используя df_sample.mean (axis = 0), а затем добавить эту серию в пустой кадр данных, и я хочу 1 миллион такие строки. Я получаю результат, но это занимает слишком много времени, чтобы бежать. Может кто-нибудь предложить эффективный способ сделать это?

train = pd.DataFrame()

for i in range (1000000):

    df_sample  = df_2.sample(n=100)
    row = df_sample.mean(axis=0)
    train = train.append(row,ignore_index=True)

1 Ответ

0 голосов
/ 16 января 2020

Вот более быстрый способ сделать это: 1 миллион (10 лакх) строк:

Метод 1: выборка с использованием pandas встроенного

n_times = 1000000
values = [df_2.sample(n=1).mean(axis=0, numeric_only=True) for _ in range (n_times)]
train = pd.DataFrame(values, columns=['mean_col'])

Метод 2: Выборка с использованием numpy

def f1():
    return np.mean(df_2.values[np.random.randint(0, df.shape[0])])

def f2():
    return df_2.iloc[np.random.randint(0, df.shape[0])].mean(axis=0, numeric_only=True)

values = [f1() for _ in range(n_times)]
train = pd.DataFrame(values, columns=['mean_col'])

values = [f2() for _ in range(n_times)]
train = pd.DataFrame(values, columns=['mean_col'])
...