Python学习笔记-数据分析-Pandas07—数据分组及相关操作

这篇博客详细介绍了Pandas中的数据分组操作,包括使用groupby函数,探讨了groupby参数、get_group、groups、size等方法的用法,并通过实例展示了如何按数据类型、字典、Series和自定义函数进行分组,以及如何进行多函数计算agg()。
摘要由CSDN通过智能技术生成
Pandas数据结构—数据分组及相关操作
一、分组 groupby
二、基本操作(一)
三、基本操作(二)
四、基本操作(三)
一、分组 groupby
groupby参数如下:
by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs
基本操作的一些方法:get_group() 、groups() 、size()、按数据类型分组、通过字典分组、通过Series分组、多函数计算agg()
二、基本操作(一)
# 分组后会得到一个新的dataframe
# axis参数模式 = 0,意思是以行来分组
# 多个列分组用([])来写

df = pd.DataFrame({
   'A' : ['python', 'java', 'python', 'java','python', 'C++', 'java', 'python'],
                   'B' : ['P', 'P', 'J', 'C', 'J', 'J', 'P', 'C'],
                   'C' : np.random.randn(8),
                   'D' : np.random.randn(8)})
print(df)
print('----------------------------------------------------------------')

# 注意:如果直接使用.groupby()这个方法,得到的只是一个groupby对象,它是一个中间数据,没有具体的数据内容呈现,
# 必须加入一个在.groupby()后面加上方法,才能进行计算。

# 根据A列进行分组
print('这是中间数据,没有具体的数据内容呈现:\n',df.groupby('A'))
print('----------------------------------------------------------------')

# 根据A列进行分组,并对分组进行求和
print('通过sum(),来呈现具体数据:\n',df.groupby('A').sum())
print('----------------------------------------------------------------')
# 根据A列进行分组,并对分组进行求平均
print('通过mean(),来呈现具体数据:\n',df.groupby('A').mean())
print('----------------------------------------------------------------')

# 根据A和B这两列同时分组。并对分组求和
a = df.groupby(['A','B']).sum()
print(a)
print('----------------------------------------------------------------')

# 根据A列进行分组,对D列求和,得到的结果只有D。
b = df.groupby(['A'])['D'].mean()
print(b)
print('----------------------------------------------------------------')

运行结果如下:

 A  B         C         D
0  python  P  1.464222  0.311215
1    java  P  0.094774 -0.550092
2  python  J -1.675885  1.092220
3    java  C -0.826553  0.193789
4  python  J -1.015872 -0.483023
5     C++  J  1.779017 -0.875131
6    java  P -0.897008  0.781554
7  python  C -1.198245 -0.479048
----------------------------------------------------------------
这是中间数据,没有具体的数据内容呈现:
 <pandas.core.groupby.DataFrameGroupBy object at 0x000001DDAFE312B0>
----------------------------------------------------------------
通过sum(),来呈现具体数据:
                C         D
A                         
C++     1.779017 -0.875131
java   -1.628787  0.425250
python -2.425780  0.441363
----------------------------------------------------------------
通过mean(),来呈现具体数据:
                C         D
A                         
C++     1.779017 -0.875131
java   -0.542929  0.141750
python -0.606445  0.110341
----------------------------------------------------------------
                 C         D
A      B                    
C++    J  1.779017 -0.875131
java   C -0.826553  0.193789
       P -0.802234  0.231462
python C -1.198245 -0.479048
       J -2.691757  0.609197
       P  1.464222  0.311215
----------------------------------------------------------------
A
C++      -0.875131
java      0.141750
python    0.110341
Name: D, dtype: float64
----------------------------------------------------------------
三、基本操作(二)get_group() 、groups() 、size()
df = pd.DataFrame({
   'X' : ['A', 'B', 'A', 'B'], 'Y' : [1, 2, 3, 4]})
print(df)
print('----------------------------------------------------------------')
print(df.groupby('X'))
print('----------------------------------------------------------------')
print(type(df.groupby('X')))
print('----------------------------------------------------------------')

# 通过list()将分组后的数据变成list,list中的元素是元组。
a = list(df.groupby('X'))

# 打印的结果会看着比较奇怪,打印出两个元组,其中元组的第一个元素是组名,第二元素其实是一个dataframe。
print(a)
print('----------------------------------------------------------------')

# 以元组的形式进行呈现。因为分成了A和B的两组,所以[0]呈现的是有A的组
print(a[0])
print('----------------------------------------------------------------')

# 有B的组
print(a[1])
print('----------------------------------------------------------------')

# 通过for循环读取分组中的各元素。
# n表示分组的成名,g表示分组里的数据。
for n,g in a:
    print(n)
    print(g)
    print(type(g))
    print('#####################')
print('----------------------------------------------------------------')

# 通过get_group()获得分组后的组
print('获得分组A:\n',df.groupby(['X']).get_group('A'))
print('----------------------------------------------------------------')
print('获得分组A:\n',df.groupby(['X']).get_group('B'))
print('----------------------------------------------------------------')

# 通过.groups将分组后的结果转为字典(dict),可用字典索引方法来查看groups里的元素
# 这里需要注意的是groups返回的是index。
dg = df.groupby(['X'])
print(dg.groups)
print('----------------------------------------------------------------')
print(dg.groups['A'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值