如何在Pandas中堆叠操作生成DataFrame汇总表?
用Pandas整合独立计算结果生成可转置的汇总表
我懂你的痛点——每次单独计算count、均值这些统计量,得到的都是零散的结果,想把它们拼成一张规整的汇总表还转个方向,之前用列表append的方式没成功对吧?其实问题出在没有给每个结果绑定明确的标识,下面给你两种简单靠谱的方法:
方法一:用字典收集结果(最直观)
先把每个统计项和对应的计算结果存在字典里,键就是统计项的名称,值就是Pandas计算出来的Series(比如df.count()返回的就是各列的统计值),最后把字典转成DataFrame再转置就行。
举个完整的例子:
import pandas as pd import numpy as np # 先准备示例数据(你替换成自己的DataFrame就行) df = pd.DataFrame({ '销售额': [1200, 1500, np.nan, 1800, 2000], '访客数': [300, 450, 500, np.nan, 600] }) # 初始化字典存汇总结果 summary_dict = {} # 逐个计算并存入字典,键是统计项名称 summary_dict['非缺失值数量'] = df.count() summary_dict['均值'] = df.mean().round(2) summary_dict['中位数'] = df.median() summary_dict['最大值'] = df.max() # 转成DataFrame并转置,得到行是统计项、列是原始字段的汇总表 summary_table = pd.DataFrame(summary_dict).T print(summary_table)
运行后你会得到这样的结果(转置后的):
销售额 访客数 非缺失值数量 4.0 4.0 均值 1625.0 462.5 中位数 1650.0 475.0 最大值 2000.0 600.0
方法二:用带名称的Series列表拼接
如果习惯用列表,那别直接append数值,要append带name属性的Series,这样合并的时候每个Series的name就会变成汇总表的行名,最后转置就搞定了。
代码示例:
import pandas as pd import numpy as np df = pd.DataFrame({ '销售额': [1200, 1500, np.nan, 1800, 2000], '访客数': [300, 450, 500, np.nan, 600] }) # 初始化列表存带名称的Series summary_list = [] # 每个统计项生成带name的Series,加入列表 summary_list.append(pd.Series(df.count(), name='非缺失值数量')) summary_list.append(pd.Series(df.mean().round(2), name='均值')) summary_list.append(pd.Series(df.median(), name='中位数')) summary_list.append(pd.Series(df.max(), name='最大值')) # 按列合并Series,再转置 summary_table = pd.concat(summary_list, axis=1).T print(summary_table)
为什么你之前的append没成功?
如果只是把df.count()或者单个数值直接append到空列表里,列表里的元素没有明确的“统计项名称”标识,合并的时候没法自动生成带行名的结构,自然得不到你想要的规整汇总表。上面两种方法的核心就是给每个统计结果绑定名称,这样转置后结构才清晰。
内容的提问来源于stack exchange,提问作者AntonioAgAl
相关产品推荐
相关产品推荐

