导读:本期聚焦于小伙伴创作的《如何用Pandas统计每日类型数量?DataFrame按日期分组计数的完整教程》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何用Pandas统计每日类型数量?DataFrame按日期分组计数的完整教程》有用,将其分享出去将是对创作者最好的鼓励。

使用Pandas统计每日类型数量

在实际数据处理场景中,我们经常会拿到包含日期、类型字段的原始数据,需要按天统计每个类型出现的次数,生成每日类型数量统计表。这种需求在用户行为分析、订单统计、日志分析等场景中非常常见,本文就介绍如何使用Pandas快速实现这个需求。

准备示例数据

首先我们先构造一份包含日期和类型的模拟DataFrame,方便后续演示转换过程。示例数据包含三列:date表示日期,type表示类型,other_col是无关的其他列,用于模拟真实场景下的冗余字段。

import pandas as pd

# 构造示例数据
data = {
    "date": ["2024-05-01", "2024-05-01", "2024-05-01", "2024-05-02", "2024-05-02", "2024-05-03"],
    "type": ["A", "B", "A", "A", "C", "B"],
    "other_col": [1, 2, 3, 4, 5, 6]
}
df = pd.DataFrame(data)
# 将date列转换为日期类型,方便后续按日期分组
df["date"] = pd.to_datetime(df["date"])
print("原始数据:")
print(df)

运行上述代码后,得到的原始数据如下:

原始数据:
        date type  other_col
0 2024-05-01    A          1
1 2024-05-01    B          2
2 2024-05-01    A          3
3 2024-05-02    A          4
4 2024-05-02    C          5
5 2024-05-03    B          6

核心转换方法:使用透视表

Pandas的pivot_table函数是实现这个需求最简洁的方式,它可以按照指定的行、列维度对数据进行聚合统计。我们需要将日期作为行索引,类型作为列索引,统计每个组合的出现次数。

# 使用透视表统计每日类型数量
result = pd.pivot_table(
    df,
    index="date",       # 行索引:日期
    columns="type",     # 列索引:类型
    aggfunc="size",     # 聚合方式:计数
    fill_value=0       # 没有数据的位置填充0
)
# 重置索引,让date列变为普通列,方便后续处理
result = result.reset_index()
print("每日类型数量统计表:")
print(result)

运行上述代码后,得到的统计结果如下:

每日类型数量统计表:
type       date  A  B  C
0    2024-05-01  2  1  0
1    2024-05-02  1  0  1
2    2024-05-03  0  1  0

这里简单解释下参数作用:index指定分组的行维度为日期,columns指定分组的列维度为类型,aggfunc="size"表示统计每个分组的记录数,也就是对应日期下对应类型的数量,fill_value=0会把没有对应数据的位置填充为0,避免结果中出现缺失值。

另一种实现方式:使用groupby+unstack

如果不熟悉透视表的使用,也可以通过groupby分组后配合unstack方法实现同样的效果,这种方式的逻辑更贴近手动分组的思路。

# 先按日期和类型分组计数
grouped = df.groupby(["date", "type"]).size().reset_index(name="count")
# 将type列的值转换为列索引,得到每日类型数量
result2 = grouped.pivot(index="date", columns="type", values="count").fillna(0).reset_index()
print("使用groupby+unstack的结果:")
print(result2)

运行后得到的统计结果和透视表方法完全一致。这种方式的思路是先对日期和类型两个维度做分组,统计每个组合的数量,再通过pivot方法把类型列的内容转换为列索引,最后填充缺失值为0即可。

结果优化

如果希望最终的统计表中日期格式更友好,或者需要按日期排序,可以做进一步的优化处理。

# 优化结果:日期格式转为字符串,按日期排序
result["date"] = result["date"].dt.strftime("%Y-%m-%d")
result = result.sort_values("date").reset_index(drop=True)
print("优化后的统计表:")
print(result)

优化后的结果日期会显示为字符串格式,更适合直接导出或展示,同时确保了日期是按升序排列的。

总结

将包含日期和类型的DataFrame转换为每日类型数量统计表,核心思路就是按照日期和类型两个维度做分组计数,再将类型维度转换为列索引。推荐使用pivot_table方法,代码更简洁,只需要几行就能完成转换;如果更习惯分步处理,也可以选择groupby+unstack的方式。两种方法都能得到正确的统计结果,可以根据个人习惯选择使用。

Pandas每日类型统计透视表groupby数据处理 本作品最后修改时间:2026-05-23 16:39:31

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