Python中如何为循环输出的统计列表添加行列表头并转为带表头的表格
问题解决方法
报错原因说明
AttributeError: module 'pandas' has no attribute 'Dataframe'是拼写错误,pandas的DataFrame构造方法首字母D和F都要大写,小写的f会识别不到。ValueError: Shape of passed values is (4, 1), indices imply (1, 4)是因为传入构造DataFrame的数据维度不匹配:要么是直接把单组的4个统计值的一维元组当入参,要么是没有把所有分组的结果拼装成二维列表结构,导致pandas解析维度错误。- 你原代码里的循环变量写法也有问题:
groupby迭代返回的是(分组键, 分组DataFrame)的二元组,只写一个df_grp接收的话,后续直接用grp会报未定义错误。
正确实现代码
你需要先把所有分组的统计结果连同对应的Segment名称一起存入一个列表,再统一转换为DataFrame,完整代码如下:
import pandas as pd import numpy as np import math # 初始化空列表存储所有分组的统计结果 stats_list = [] # 遍历groupby结果,分别接收分组名和分组数据 for seg_name, grp in df.groupby(['Segment']): grp_ci = 1.96 * np.std(grp['Conversion_Percentage'])/math.sqrt(len(grp['Conversion_Percentage'])) grp_cvr = grp['Conversion_Percentage'].iloc[-1] grp_ci95plus = grp_cvr + grp_ci grp_ci95minus = grp_cvr - grp_ci # 将分组名和四个统计值一起存入列表 stats_list.append([seg_name, grp_ci, grp_cvr, grp_ci95plus, grp_ci95minus]) # 统一转为DataFrame,指定列名后将Segment设为行索引 result_df = pd.DataFrame(stats_list, columns=['Segment', 'ci', 'cvr', 'ci95plus', 'ci95minus']).set_index('Segment') # 直接打印即可得到你需要的表格格式输出 print(result_df)
内容的提问来源于stack exchange,提问作者Abhishek Singh
相关产品推荐
相关产品推荐

