从pandas数据帧聚合随机样本并在空数据帧中迭代附加采样df平均值的更有效方法

从pandas数据帧聚合随机样本并在空数据帧中迭代附加采样df平均值的更有效方法,pandas,dataframe,for-loop,aggregate,sampling,Pandas,Dataframe,For Loop,Aggregate,Sampling,我试图从我的df中随机抽取一个样本,使用df_sample.mean(axis=0)获取单行序列中所有列的平均值,然后将这个序列附加到一个空数据帧,我想要100万行这样的行。我得到了结果,但运行时间太长了。有人能提出一个有效的方法吗 train = pd.DataFrame() for i in range (1000000): df_sample = df_2.sample(n=100) row = df_sample.mean(axis=0) train = t

我试图从我的df中随机抽取一个样本,使用df_sample.mean(axis=0)获取单行序列中所有列的平均值,然后将这个序列附加到一个空数据帧,我想要100万行这样的行。我得到了结果,但运行时间太长了。有人能提出一个有效的方法吗

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)

这里有一个更快的方法,这将产生100万(1000万)行:

方法1:使用内置熊猫进行采样

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'])

我很困惑。从dataframe中抽取100条记录,计算每行的平均值,这将为您提供100维列向量,然后将其作为一行附加到新的dataframe?这样做的目的是什么?获取具有连续变量的聚合数据集(因为均值)。我的原始数据集只有分类变量。所以,这就是为什么不是更快的方法,用的时间几乎相同