如何对DataFrame列表中重复索引分组求均值并输出结果DataFrame
实现方案
我们可以用字典记录每个索引对应的数值总和、出现次数,遍历完所有DataFrame后再计算均值生成结果,全程不需要拼接DataFrame,代码如下:
import pandas as pd # 初始化两个字典分别存储索引对应的数值总和、出现次数 sum_dict = {} count_dict = {} # 遍历列表内的每一个DataFrame for df in df_list: # 遍历当前df的每一行索引和对应的N列数值 for idx, val in df['N'].items(): sum_dict[idx] = sum_dict.get(idx, 0) + val count_dict[idx] = count_dict.get(idx, 0) + 1 # 计算每个索引的均值,转换为目标DataFrame avg_dict = {idx: sum_dict[idx]/count_dict[idx] for idx in sum_dict} result_df = pd.DataFrame.from_dict(avg_dict, orient='index', columns=['N']) # 按索引排序即可得到符合预期的输出 result_df = result_df.sort_index()
输出验证
打印result_df即可得到目标结果:
N 1 1.7 2 1.6 3 2.9 4 4.3 5 6.4 7 4.9
逻辑说明
- 全程没有使用
pd.concat、pd.merge这类拼接DataFrame的方法,完全符合要求 - 逐个遍历DataFrame的行数据做统计,内存占用比直接拼接大表更低,也适配DataFrame数量多、单表体量小的场景
内容的提问来源于stack exchange,提问作者zeno Zeng
相关产品推荐
相关产品推荐

