看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在数据分析中,将记录数据转为列数据通常称为"数据透视"或"数据透视表"操作。这是一种将原始数据按照某些特定字段进行分组,并在表格中展示汇总结果的技术。数据透视表可以帮助我们更好地理解数据的分布和关系,从而支持更深入的数据分析和洞察。
我们再构造数据:
import pandas as pd
df = pd.DataFrame({'分类': [*'AABBBA'],
'类型': [*'xxyzzz']})
df
'''
分类 类型
0 A x
1 A x
2 B y
3 B z
4 B z
5 A z
'''
需求是透视为一个新的结构的数据,列为分类A、B,行为类型的名称,值为对应类型的数量。
我们将两列创建分组对象,然后聚合计算每个分组的数量,然后解堆数据,最后填充缺失值,并将数据类型转为整型。
最终的代码如下:
(
df.groupby(['分类', '类型'])
.size()
.unstack()
.fillna(0)
.astype(int)
)
'''
类型 x y z
分类
A 2 0 1
B 0 1 2
'''
上面的代码使用了Python中的pandas库对数据进行分析和处理,主要涉及了DataFrame的groupby、size、unstack、fillna和astype方法。让我们逐步解释这些操作的含义:
df是一个DataFrame对象,包含了以下列:'分类'和'类型'。
df.groupby(['分类', '类型']).size()
:按照'分类'和'类型'两列进行分组,并计算每个组的大小,即该组包含的记录数。这样会生成一个Series对象,索引是'分类'和'类型'两列的组合,值是每个组的记录数。.unstack()
:将上一步生成的Series对象转换为一个二维表格。其中,'分类'作为行索引,'类型'作为列索引,表格中的值是每个组的记录数。如果某些组在原始数据中不存在,则在转换后的表格中对应位置填充NaN(缺失值)。.fillna(0)
:将表格中的NaN值用0填充,以确保每个组都有对应的记录数。这样可以避免后续处理出现NaN相关的问题。.astype(int)
:将表格中的所有值转换为整数类型,因为记录数一般是整数,而不需要保留小数点。最终,代码将原始的DataFrame对象df按照'分类'和'类型'进行分组,并得到一个包含记录数的二维表格。这种数据透视的操作可以帮助我们更好地理解和汇总数据中不同分类和类型的分布情况,以便进行更深入的数据分析和可视化。
我们还可以使用透视方法来完成:
(
df.pivot_table(index='分类', columns='类型', aggfunc='size')
.fillna(0)
.astype(int)
)
这样都可以完成这个需求。
(完)
更新时间:2024-08-18 16:17:27 标签:pandas python 统计