Python 有效分割数据帧并将该方法应用于子集

Python 有效分割数据帧并将该方法应用于子集,python,pandas,numpy,dataframe,Python,Pandas,Numpy,Dataframe,在熊猫中,我想: 从具有单个列的数据帧中随机选择样本 将此示例拆分为nr_个块,每个块包含每个块的项目 计算每个区块的平均值 并将其绘制成直方图 只要我增加每个块的项数,但保持块数不变,每个块平均值的直方图就应该绘制成一条缩小的钟形曲线 我想出了以下的熊猫,Numpy,海洋出生的方法,在我看来效率低下或者不是很聪明: %matplotlib内联 作为pd进口熊猫 导入seaborn作为sns 将numpy作为np导入 sns.set df=pd.read_csv'../data/data.csv

在熊猫中,我想:

从具有单个列的数据帧中随机选择样本 将此示例拆分为nr_个块,每个块包含每个块的项目 计算每个区块的平均值 并将其绘制成直方图 只要我增加每个块的项数,但保持块数不变,每个块平均值的直方图就应该绘制成一条缩小的钟形曲线

我想出了以下的熊猫,Numpy,海洋出生的方法,在我看来效率低下或者不是很聪明:

%matplotlib内联 作为pd进口熊猫 导入seaborn作为sns 将numpy作为np导入 sns.set df=pd.read_csv'../data/data.csv' 块的数量=1000 对于[1,5,20]中每个\u块的\u项: sample=df.samplenr\u的块数*每个块的项数 chunks=np.array\u splitsample,nr\u个块 mean_of_chunks=[chunk.mean for chunk in chunks] sns.distplot表示块中的块 输出:


有更好的方法吗?例如,我希望有一种方法可以在拆分样本时直接将均值函数应用于每个区块。

将样本索引重置为常规范围索引后,您只需将索引层除以每个区块的项目即可:

import pandas as pd
import seaborn as sns
sns.set()

df = pd.read_csv('../data/data.csv')

nr_of_chunks = 1000

for items_per_chunk in [1, 5, 20]:
  sample = df.sample(nr_of_chunks * items_per_chunk).reset_index(drop=True)
  mean_of_chunks = sample.groupby(sample.index // items_per_chunk).mean()

  sns.distplot(mean_of_chunks)