数据清洗,如何理解groupby的as_index参数?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
对dataframe
数据进行分组的时候,有个as_index
参数。本文对这个参数进行一下简要的讨论,根据官方文档的说法,这个参数的最大的作用是控制数据输出的风格。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程经验文章。本文测试环境:python@3.12.3
,pandas@2.2.2
,numpy@1.26.4
。
前置阅读
本文强烈相关的文章有:
- https://newsn.net/say/dataframe-groupby.html
- https://newsn.net/say/dataframe-groupby-first.html
- hhttps://newsn.net/say/pandas-dataframe.html
本文的龙套角色数据,依然是苏南大叔的宠物列表。数据如下:
import pandas as pd
df = pd.DataFrame( data = [
['虎子', 3, "狗"],
['老许', 3, "猫"],
['二赖子', 6, "狗"],
['老白', 6, "猫"],
['小黑', 5, "狗"],
],
columns = ['name', 'age', 'category']
)
print(df)
输出:
name age category
0 虎子 3 狗
1 老许 3 猫
2 二赖子 6 狗
3 老白 6 猫
4 小黑 5 狗
由于本文范例数据的特殊性,使用.first()
输出所有目标数据。
默认as_index为True【真正的groupby】
g0 = df.groupby(['category', 'age'])
g1 = df.groupby(['category', 'age'], as_index=True)
print(g0.first())
print(g1.first())
输出都是:
name
category age
狗 3 虎子
5 小黑
6 二赖子
猫 3 老许
6 老白
注意看:category age
和name
,并不在一行上。前者表示的是group
,后者就是传统意义上的列名。
as_index = False【sql风格输出】
什么是sql
风格输出呢?个人理解就是类似sql语句的数据输出,每行上都有数据。当然,对于dataframe
原始数据输出的话,这些数据是根据group
排序过的,而且全部的索引值进行了重排。
g2 = df.groupby(['category', 'age'], as_index=False)
print(g2.first())
输出:
category age name
0 狗 3 虎子
1 狗 5 小黑
2 狗 6 二赖子
3 猫 3 老许
4 猫 6 老白
describe()输出【不推荐】
使用.describe()
输出,也可以看到两者的数据结果,是有区别的。但是得到的是统计数据,并非原始数据。
print(df.groupby(['category', 'age']).describe())
输出:
name
count unique top freq
category age
狗 3 1 1 虎子 1
5 1 1 小黑 1
6 1 1 二赖子 1
猫 3 1 1 老许 1
6 1 1 老白 1
print(df.groupby(['category', 'age'], as_index=False).describe())
输出:
category age name
count unique top freq
0 狗 3 1 1 虎子 1
1 狗 5 1 1 小黑 1
2 狗 6 1 1 二赖子 1
3 猫 3 1 1 老许 1
4 猫 6 1 1 老白 1
结语
目前来看,as_index
参数带来的数据结果表现形式,确实有所区别。
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。