pandas之groupby

发布时间 2023-08-04 16:08:37作者: Rong_Z

数据准备

import pandas as pd


df = pd.read_excel(r"C:\Users\Desktop\Excel工作表.xlsx")  
print(df)
"""
   产品  分类  价格    销量
0  桃子  水果  12  2134
1  李子  水果  23  3123
2  香蕉  水果  12   534
3  饺子  生鲜  11   565
4  馒头  生鲜   9  6788
5  包子  生鲜   7   453
6  猪肉  肉类  20   211
7  牛肉  肉类  30   458
"""

方法介绍

# 1、单列聚合求平均、求和,返回DataFrame  
df1 = df.groupby('分类', as_index=False)['价格'].mean()  
print(df1)  
df2 = df.groupby('分类', as_index=False)['价格'].sum()  
print(df2)

# 2、多列聚合求平均,返回DataFrame  
df2 = df.groupby('分类', as_index=False)[['价格', '销量']].mean()  
print(df2)  
  
# 3、多列多个聚合  
df2 = df.groupby('分类')[['价格']].agg(['mean', 'max'])  
print(df2)  
  
# 4、对聚合结果重命名,返回为DataFrame  
df2 = df.groupby('分类', as_index=False)[['价格']].agg(平均价格=('价格', 'mean'), 最高价格=('价格', 'max'))  
print(df2)  
  
# 5、多列分组,返回为DataFrame  
df2 = df.groupby(['产品', '分类'], as_index=False).agg(平均价格=('价格', 'mean'))  
print(df2)  
  
# 6、多列分组并根据平均价格降序排序,返回为DataFrame  
df2 = df.groupby(['产品', '分类'], as_index=False).agg(平均价格=('价格', 'mean')).sort_values(by='平均价格', ascending=False)  
print(df2)  
  
# 7、最大的top N  
df2 = df.groupby('分类')['销量'].nlargest(2)  
print(df2)  
  
# 8、最小的top N  
df2 = df.groupby('分类')['销量'].nsmallest(3)  
print(df2)  
  
# 9、唯一值  
df2 = df.groupby('分类', as_index=False).agg(unique_values=('产品', 'unique'))  
print(df2)  
  
# 10、唯一值的数量  
df2 = df.groupby('分类', as_index=False).agg(num_unique_values=('产品', 'nunique'))  
print(df2)  
  
# 11、分组的个数  
df2 = df.groupby('分类').ngroups  
print(df2)  
  
# 12、获得某个特定分组  
df2 = df.groupby(['分类', '产品']).get_group(('水果', '李子'))  
print(df2)  
  
# 13、rank函数。对每个组中的行进行排序。  
df['dense_rank'] = df.groupby('分类')['价格'].rank(ascending=False, method='dense')  
print(df)  
  
# 14、将分组展开后求和  
df['price'] = df.groupby('分类')['价格'].expanding().sum().values  
print(df)