循环生成同结构DataFrame,如何批量计算各单元格统计量(含describe)
批量DataFrame单元格统计量计算方案
核心思路
先把所有生成的DataFrame收集到列表,再通过合并、分组操作,对每个单元格的所有迭代值计算统计量,包括均值、众数或用describe获取完整描述性统计。
步骤与代码实现
收集所有生成的DataFrame
循环生成时,把每个DataFrame存入列表,避免直接打印浪费数据:import pandas as pd import numpy as np num_iterations = 500 df_list = [] for i in range(num_iterations): df = pd.DataFrame(np.random.randint(0, 10, size=(3, 3)), columns=['A', 'B', 'C']) df_list.append(df)合并DataFrame并分组计算统计量
用pd.concat把所有DataFrame堆叠,按行索引+列名分组,就能定位到每个单元格的所有迭代值:计算均值、众数
# 合并所有df,保留迭代标识和行索引 combined = pd.concat(df_list, keys=range(num_iterations), names=['iter', 'row']) # 按行索引和列分组,计算均值和众数(众数取第一个出现的) cell_stats = combined.groupby(['row', combined.columns]).agg(['mean', lambda x: x.mode().iloc[0]]) # 整理成和原DataFrame一致的结构 stats_df = cell_stats.unstack(level=1) stats_df.columns = ['A_mean', 'A_mode', 'B_mean', 'B_mode', 'C_mean', 'C_mode']用describe获取完整统计量
如果需要更全面的统计(计数、标准差、分位数等),直接调用describe:full_stats = combined.groupby(['row', combined.columns]).describe() # 整理结构,方便查看每个单元格的所有统计项 full_stats_unstacked = full_stats.unstack(level=1)
快速生成单一统计量矩阵
如果只需要均值或众数的矩阵,可简化操作:# 均值矩阵,结构和原DataFrame完全一致 mean_matrix = pd.concat(df_list).groupby(level=0).mean() # 众数矩阵 mode_matrix = pd.concat(df_list).groupby(level=0).agg(lambda x: x.mode().iloc[0])
结果说明
最终生成的stats_df、mean_matrix等结构和原DataFrame完全对应,每个位置的值就是该单元格在500次迭代中的统计结果。
内容的提问来源于stack exchange,提问作者MasayoMusic
相关产品推荐
相关产品推荐

