pandas for循环创建多个DataFrame仅保存最后一个结果的问题咨询
问题原因及解决方案
你代码的问题核心是:for循环中的base是临时迭代变量,每次对它赋值只会覆盖当前迭代的临时变量值,不会保留之前的处理结果,也不会修改bases列表的原始元素,因此循环结束后仅能拿到最后一次迭代的处理结果。
方案1:将处理结果存入新列表后续调用
bases = [base1, base1_a, base1_b] processed_bases = [] # 存储所有处理后的数据集 for base in bases: processed = base.groupby(["Cliente_id", "Periodo_id"]).agg({"monto_2018": ["sum", "mean", "min", "max"]}).reset_index().round(1) processed.columns = processed.columns.get_level_values(1) processed = processed.set_axis(["Cliente_id", "Periodo_id", 'sum_v', 'mean_v', 'min_v', "max_v"], axis=1, inplace=False) processed_bases.append(processed)
后续调用时:
processed_bases[0]对应base1的处理结果processed_bases[1]对应base1_a的处理结果processed_bases[2]对应base1_b的处理结果
方案2:循环中直接保存为本地文件
如果需要直接导出为独立的csv文件,可按文件名匹配循环导出:
bases = [base1, base1_a, base1_b] # 自定义三个结果的文件名,和上面的数据集顺序一一对应 output_names = ["base1处理结果.csv", "base1_a处理结果.csv", "base1_b处理结果.csv"] for base, output_name in zip(bases, output_names): base = base.groupby(["Cliente_id", "Periodo_id"]).agg({"monto_2018": ["sum", "mean", "min", "max"]}).reset_index().round(1) base.columns = base.columns.get_level_values(1) base = base.set_axis(["Cliente_id", "Periodo_id", 'sum_v', 'mean_v', 'min_v', "max_v"], axis=1, inplace=False) # 导出为csv,不需要索引列 base.to_csv(output_name, index=False, encoding="utf-8-sig")
内容的提问来源于stack exchange,提问作者Shirley Michelle Redroban
相关产品推荐
相关产品推荐

