pandas中groupby函数是对数据进行分组用的,但是分组完之后是个什么样子,很多同学都搞不清楚,那我们今天就具体看看是什么。
先创建一个dataframe
import pandas as pd
data = {'姓名': ['张三', '李四', '王五', '赵六'],
'年龄': [20, 22, 21, 19],
'性别': ['男', '男', '女', '女']}
df = pd.DataFrame(data)
print(df)
打印结果如下:
姓名 年龄 性别
0 张三 20 男
1 李四 22 男
2 王五 21 女
3 赵六 19 女
然后我们对性别分组一下
data_gp= df.groupby('性别')
print(data_gp)
print(type(data_gp))
输出为:
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002909913FA58>
<class 'pandas.core.groupby.generic.DataFrameGroupBy'>
发现df在分组完之后是个groupby对象,这个对象我们是不能直接查看的,但是groupby对象是可遍历的。
1.for循环遍历打印
如下:
for i in data_gp:
print(i)
('女', 姓名 年龄 性别
2 王五 21 女
3 赵六 19 女)
('男', 姓名 年龄 性别
0 张三 20 男
1 李四 22 男)
发现i都是一个元组,长度为2,元组索引位置为0的元素是分组名,索引为1的元素是个dataframe。具体验证如下
for i,j in data_gp:
print(i,type(j))
女 <class 'pandas.core.frame.DataFrame'>
男 <class 'pandas.core.frame.DataFrame'>
2.使用groups查看分组情况
print(data_gp.groups)
{'女': [2, 3], '男': [0, 1]}
发现groups之后会返回一个字典,字典中的键是分组名,值是列表,分别对应着原df的索引。如2,3代码着性别为女的数据是在df的第三行和第四行。
3.使用get_group()查看组内内容
print(data_gp.get_group('男'))
姓名 年龄 性别
0 张三 20 男
1 李四 22 男
使用get_group()方法可以得到某一组的内容,是个dataframe格式。
PS: get_group()方法只能够得到一组数据。