导读:本期聚焦于小伙伴创作的《如何用Pandas实现数据列转统计?从基础聚合到透视表的完整指南》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何用Pandas实现数据列转统计?从基础聚合到透视表的完整指南》有用,将其分享出去将是对创作者最好的鼓励。

如何使用Pandas实现数据的列转统计?

在数据分析场景中,我们经常会遇到需要将原始数据按列维度进行统计汇总的需求,比如统计不同分类下对应数值列的总和、平均值、最大值等。Pandas作为Python生态中核心的数据分析库,提供了多种便捷的方法来实现列转统计操作,本文将结合实际案例介绍常用的实现方式。

基础场景:单列统计

如果只需要对某一列进行基础的统计计算,比如求和、求均值、计数等,可以直接调用Pandas Series对象的统计方法。以下是基础单列统计的示例代码:

import pandas as pd

# 构造示例数据
data = {
    "分类": ["A", "B", "A", "B", "A", "C"],
    "数值": [10, 20, 15, 25, 30, 40]
}
df = pd.DataFrame(data)
print("原始数据:")
print(df)

# 对数值列求和
sum_result = df["数值"].sum()
# 对数值列求平均值
mean_result = df["数值"].mean()
# 对分类列计数
count_result = df["分类"].count()

print(f"\n数值列总和:{sum_result}")
print(f"数值列平均值:{mean_result}")
print(f"分类列计数:{count_result}")

上述代码中,我们首先构造了一个包含分类和数值两列的DataFrame,然后分别调用sum()mean()count()方法完成单列的统计计算,适用于单维度、单一统计指标的场景。

分组统计:按列分组实现多指标统计

如果是需要按照某一列(分组列)的不同取值,对另一列(数值列)进行多维度统计,最常用的方式是groupby()方法结合统计函数。以下是按分类列分组,统计数值列的总和、平均值、最大值的示例:

import pandas as pd

# 构造示例数据
data = {
    "分类": ["A", "B", "A", "B", "A", "C", "C"],
    "数值": [10, 20, 15, 25, 30, 40, 35]
}
df = pd.DataFrame(data)

# 按分类列分组,对数值列进行多指标统计
grouped_result = df.groupby("分类")["数值"].agg(["sum", "mean", "max", "count"])
print("分组统计结果:")
print(grouped_result)

这里我们使用groupby("分类")先按照分类列进行分组,然后选中数值列,通过agg()方法传入需要计算的统计指标列表,一次性得到每个分类下数值列的总和、平均值、最大值和计数,结果会自动生成对应的列名,清晰展示不同分组的统计结果。

交叉统计:多列组合的列转统计

当需要同时按照多列进行分组,或者需要生成交叉维度的统计结果时,可以使用pivot_table()透视表方法,它支持更灵活的多维度统计配置。以下是按分类和子分类两列分组,统计数值列总和的示例:

import pandas as pd

# 构造示例数据
data = {
    "分类": ["A", "A", "B", "B", "A", "B", "C", "C"],
    "子分类": ["X", "Y", "X", "Y", "X", "Y", "X", "Y"],
    "数值": [10, 20, 15, 25, 30, 40, 50, 60]
}
df = pd.DataFrame(data)

# 生成透视表,按分类和子分类分组,统计数值总和,缺失值填充为0
pivot_result = pd.pivot_table(
    df,
    values="数值",
    index="分类",
    columns="子分类",
    aggfunc="sum",
    fill_value=0
)
print("交叉统计透视表结果:")
print(pivot_result)

pivot_table()方法中,values指定需要统计的数值列,index指定行维度的分组列,columns指定列维度的分组列,aggfunc指定统计方法,fill_value可以设置缺失值的填充值。最终会生成一个二维表,行是分类的不同取值,列是子分类的不同取值,表格中的值是对应的统计结果,非常适合多维度列转统计的场景。

自定义统计:复杂逻辑的实现

如果内置的统计函数无法满足需求,还可以在agg()中传入自定义的函数来实现复杂统计逻辑。比如需要统计每个分类下数值列的标准差,同时自定义一个计算数值范围(最大值减最小值)的统计函数:

import pandas as pd

# 构造示例数据
data = {
    "分类": ["A", "B", "A", "B", "A", "C"],
    "数值": [10, 20, 15, 25, 30, 40]
}
df = pd.DataFrame(data)

# 自定义统计函数:计算数值范围(最大值减最小值)
def value_range(series):
    return series.max() - series.min()

# 按分类分组,使用内置函数和自定义函数统计
custom_result = df.groupby("分类")["数值"].agg(["sum", "std", value_range])
# 给自定义函数的结果列重命名
custom_result = custom_result.rename(columns={"value_range": "数值范围"})
print("自定义统计结果:")
print(custom_result)

上述代码中我们定义了value_range函数,接收Series对象作为参数,计算该分组下数值的最大值和最小值的差,然后在agg()中直接传入该函数,就可以实现自定义逻辑的列转统计,最后通过rename()方法给自定义统计结果的列设置更易读的名称。

总结

针对不同的列转统计需求,Pandas提供了对应的解决方案:简单的单列统计可以直接调用Series的统计方法;单分组多指标统计优先使用groupby()结合agg();多维度交叉统计适合用pivot_table()透视表;复杂自定义逻辑可以在agg()中传入自定义函数。根据实际场景选择合适的方法,可以大幅提升数据统计分析的效率。

Pandas列转统计groupby透视表数据聚合 本作品最后修改时间:2026-05-23 21:42:51

免责声明:已尽一切努力确保本网站所含信息的准确性。网站部分内容来源于网络或由用户自行发表,内容观点不代表本站立场。本站是个人网站免费分享,内容仅供个人学习、研究或参考使用,如内容中引用了第三方作品,其版权归原作者所有。若内容触犯了您的权益,请联系我们进行处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。前端、网络、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握网站开发与运维所需的核心技术栈。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端逻辑,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。