pandas - DataFrame group分组(单列分组、多列分组、分组统计、迭代、聚合计算)

该代码示例展示了如何使用Pandas的DataFrame进行数据分组统计,包括按单列或多列分组、聚合函数应用、迭代以及数据排序。具体操作包括求和、平均、最大值、最小值等统计方法,适用于数据分析和数据清洗场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pandas - DataFrame

1、 分组

def dataFormatGroup():
    """
    分组统计
    :return:
    """
    # 解决数据输出时列名不对齐的问题
    pd.set_option('display.unicode.ambiguous_as_wide', True)
    pd.set_option('display.unicode.east_asian_width', True)

    data = [
        ["组织结构-1", "组织结构-1-1", 11, 12],
        ["组织结构-1", "组织结构-1-2", 11, 12],
        ["组织结构-1", "组织结构-1-3", 11, 12],
        ["组织结构-1", "组织结构-1-3", 13, 14],
        ["组织结构-2", "组织结构-2-1", 21, 22],
        ["组织结构-2", "组织结构-2-1", 21, 22],
        ["组织结构-2", "组织结构-2-3", 21, 22],
        ["组织结构-3", "组织结构-3-1", 31, 32],
        ["组织结构-3", "组织结构-3-1", 31, 32],
        ["组织结构-3", "组织结构-3-3", 31, 32],
        ["组织结构-4", "组织结构-4-1", 41, 42],
        ["组织结构-4", "组织结构-4-1", 41, 42],
        ["组织结构-4", "组织结构-4-3", 41, 42]
    ]
    columns = ['一级单位', '二级单位', '男员工人数', '女员工人数']

    df = pd.DataFrame(data=data, columns=columns)

    # 按单列进行分组统计
    group_one_org = df.groupby('一级单位').sum()
    print(group_one_org)

    # 按多列进行分组统计
    group_two_org = df.groupby(['一级单位', '二级单位']).sum()
    print(group_two_org)

    # 按单列进行分组统计,并统计男员工人数
    group_one_org_by_man = df.groupby(['一级单位'])["男员工人数"].sum()
    print(group_one_org_by_man)

    # 迭代
    groups = df.groupby(['一级单位'])
    for name, group in groups:
        print(name)
        print(group)

    # 聚合函数 (平均、求和、最大、最小)
    agg_1 = df.groupby("一级单位").agg(['mean', 'sum', 'max', 'min'])
    print(agg_1)

    # 聚合函数 分列聚合计算
    agg_2 = df.groupby("一级单位").agg({'男员工人数': ['mean', 'sum'], '女员工人数': ['max', 'min']})
    print(agg_2)
	
	 # 求和分组并排序(ascending True 升序 False 降序)
	 group_and_num = df.assign(sum=df.sum(axis=1)).groupby(['一级单位', '二级单位']).sum().sort_values("sum", ascending=True)
	 print(group_and_num)

原始数据:

	      一级单位      二级单位    男员工人数   女员工人数
	0   组织结构-1  组织结构-1-1          11          12
	1   组织结构-1  组织结构-1-2          11          12
	2   组织结构-1  组织结构-1-3          11          12
	3   组织结构-1  组织结构-1-3          13          14
	4   组织结构-2  组织结构-2-1          21          22
	5   组织结构-2  组织结构-2-1          21          22
	6   组织结构-2  组织结构-2-3          21          22
	7   组织结构-3  组织结构-3-1          31          32
	8   组织结构-3  组织结构-3-1          31          32
	9   组织结构-3  组织结构-3-3          31          32
	10  组织结构-4  组织结构-4-1          41          42
	11  组织结构-4  组织结构-4-1          41          42
	12  组织结构-4  组织结构-4-3          41          42

group_one_org 按单列进行分组统计 返回结果:

           		 男员工人数   女员工人数
	一级单位                          
	组织结构-1          46          50
	组织结构-2          63          66
	组织结构-3          93          96
	组织结构-4         123         126

** group_two_org 按多列进行分组统计 返回结果:**

          			   			 男员工人数  	女员工人数
	  一级单位  		二级单位                            
	组织结构-1 	组织结构-1-1          11          12
	            组织结构-1-2          11          12
	            组织结构-1-3          24          26
	组织结构-2	组织结构-2-1          42          44
	            组织结构-2-3          21          22
	组织结构-3 	组织结构-3-1          62          64
	            组织结构-3-3          31          32
	组织结构-4 	组织结构-4-1          82          84
	            组织结构-4-3          41          42

group_one_org_by_man 按单列进行分组统计,并统计男员工人数 返回结果:

	一级单位
	组织结构-1     46
	组织结构-2     63
	组织结构-3     93
	组织结构-4    123
	Name: 男员工人数, dtype: int64

groups 迭代 返回结果:

组织结构-1
	     一级单位      二级单位  男员工人数  女员工人数
	0  组织结构-1  组织结构-1-1          11          12
	1  组织结构-1  组织结构-1-2          11          12
	2  组织结构-1  组织结构-1-3          11          12
	3  组织结构-1  组织结构-1-3          13          14
	
	组织结构-2
	     一级单位      二级单位  男员工人数  女员工人数
	4  组织结构-2  组织结构-2-1          21          22
	5  组织结构-2  组织结构-2-1          21          22
	6  组织结构-2  组织结构-2-3          21          22
	
	组织结构-3
	     一级单位      二级单位  男员工人数  女员工人数
	7  组织结构-3  组织结构-3-1          31          32
	8  组织结构-3  组织结构-3-1          31          32
	9  组织结构-3  组织结构-3-3          31          32
	
	组织结构-4
	      一级单位      二级单位  男员工人数  女员工人数
	10  组织结构-4  组织结构-4-1          41          42
	11  组织结构-4  组织结构-4-1          41          42
	12  组织结构-4  组织结构-4-3          41          42

agg_1 聚合函数 (平均、求和、最大、最小) 返回结果:

						 男员工人数              女员工人数             
	                 mean  sum max min       mean  sum max min
	一级单位                                                  
	组织结构-1       11.5   46  13  11       12.5   50  14  12
	组织结构-2       21.0   63  21  21       22.0   66  22  22
	组织结构-3       31.0   93  31  31       32.0   96  32  32
	组织结构-4       41.0  123  41  41       42.0  126  42  42

agg_2 聚合函数 分列聚合计算 返回结果:

	                男员工人数      女员工人数    
	                 mean  sum        max min
	一级单位                                 
	组织结构-1       11.5   46         14  12
	组织结构-2       21.0   63         22  22
	组织结构-3       31.0   93         32  32
	组织结构-4       41.0  123         42  42

求和分组并排序(ascending True 升序 False 降序) 返回结果:


	        						男员工人数  女员工人数  sum
	一级单位      二级单位                                  
	组织结构-1    组织结构-1-1          11          12       23
	             组织结构-1-2          11          12       23
	组织结构-2    组织结构-2-3          21          22       43
	组织结构-1    组织结构-1-3          24          26       50
	组织结构-3    组织结构-3-3          31          32       63
	组织结构-4    组织结构-4-3          41          42       83
	组织结构-2    组织结构-2-1          42          44       86
	组织结构-3    组织结构-3-1          62          64      126
	组织结构-4    组织结构-4-1          82          84      166
### 回答1: Python中的DataFrame分组统计是指将数据按照某个列或多个列进行分组,然后对每个分组进行统计分析,例如计算平均值、求和、计数等。 使用pandas库中的groupby函数可以实现DataFrame分组统计。首先需要指定分组的列,然后使用聚合函数对每个分组进行统计。 例如,对以下数据按照性别进行分组统计: ``` import pandas as pd data = {'姓名': ['张三', '李四', '王五', '赵六', '钱七', '周八'], '性别': ['男', '男', '女', '女', '男', '女'], '年龄': [20, 25, 30, 35, 40, 45], '工资': [500, 600, 700, 800, 900, 10000]} df = pd.DataFrame(data) grouped = df.groupby('性别') print(grouped.mean()) # 计算每个分组的平均值 print(grouped.sum()) # 计算每个分组的总和 print(grouped.count()) # 计算每个分组的数量 ``` 输出结果如下: ``` 年龄 工资 性别 女 37.5 800 男 28.333333 6666.666667 年龄 工资 性别 女 75 16000 男 85 20000 姓名 年龄 工资 性别 女 3 4 4 男 3 3 3 ``` 可以看到,按照性别分组后,可以计算每个分组的平均值、总和和数量。 ### 回答2: Python中的pandas是一个开源的数据分析库,其中包含了一个非常强大的数据结构——DataFrameDataFrame数据结构可以看作是一张二维表格,每一列数据可以是不同类型的数据(例如:数值、字符串、布尔值等)。在对数据进行分组统计操作时,DataFrame提供了非常方便的操作方法。 在分组统计过程中,首先需要对数据进行分组,这个过程可以使用DataFrame中的groupby方法来实现。groupby方法可以对DataFrame中一列或多列数据进行分组,返回一个分组对象。可以通过对分组对象进行统计操作来获取原始数据经过分组后的统计结果。 例如,我们有一张销售数据表,其中包含了销售日期、销售量和价格等信息。我们需要对销售日期进行分组统计每一天的销售量和销售额。代码如下: ``` import pandas as pd # 创建数据表 data = { 'date': ['2022-01-01','2022-01-01','2022-01-02','2022-01-02','2022-01-03','2022-01-03'], 'sales': [100,200,150,250,300,400], 'price': [2.5,2.3,2.1,2.4,2.6,2.8] } df = pd.DataFrame(data) # 对销售日期进行分组 grouped = df.groupby('date') # 统计每一天的销售量和销售额 result = grouped.agg({'sales': 'sum', 'price': 'sum'}) print(result) ``` 运行代码后,输出结果如下: ``` sales price date 2022-01-01 300 4.8 2022-01-02 400 4.5 2022-01-03 700 5.4 ``` 结果显示,每一天的销售量和销售额被分别统计了出来。其中,agg方法中传入了一个字典,用于指定对哪些列进行统计操作,以及统计的方式(例如求和、平均数等)。 除了简单的分组统计之外,DataFrame还提供了更多的高级统计操作,例如:transform方法可以进行分组后的数据转换操作,apply方法可以对每一行数据进行自定义的统计操作等。 总之,通过pandas库提供的DataFrame数据结构和方法,我们可以非常方便地对数据进行分组统计和转换操作,并得到所需的统计结果。 ### 回答3: Python中的pandas库是一种高效的数据处理工具,其中的dataframe对象可以被用来存储和组织大量的数据集。在处理数据时,我们有时需要对数据进行分组统计,以获取更加详细的信息。 使用dataframe进行分组统计可以非常方便快捷地获取我们所需要的数据。下面我将详细介绍如何使用python dataframe进行分组统计。 1. Pandas中的GroupBy pandas中的GroupBy功能非常强大,可以轻松地对数据进行分组统计。我们可以使用groupby函数来创建一个分组对象,然后使用分组对象的agg或apply函数来执行各种分组操作。 下面以一个员工工资数据集为例,假设我们需要根据员工的职位(position)来统计各个职位的平均薪资: import pandas as pd # 导入csv数据集 data = pd.read_csv('employee.csv') # 使用groupby函数进行分组统计 grouped = data.groupby('position') # 使用agg函数进行聚合运算 result = grouped['salary'].agg('mean') print(result) 输出结果为: position CEO 50000.0 HR Manager 27000.0 Sales 22000.0 Name: salary, dtype: float64 以上代码中,首先我们导入了csv文件,并使用groupby函数将数据按职位进行分组。然后使用agg函数来计算每个职位的平均薪资。最后,我们打印出了结果。 2. 分组对象的属性和方法 groupby函数返回的是一个分组对象,我们可以通过调用该对象的属性或方法来处理数据。下面介绍一些常用的属性和方法: (1)groups:返回以分组字段为key,以分组后的dataframe的索引为values的字典。 (2)size:返回分组后的记录数。 (3)get_group:返回指定的组的dataframe。 (4)agg:聚合操作。 (5)apply:自定义聚合操作。 下面以一个员工工资数据集为例,假设我们需要根据员工的职位(position)来统计各个职位的平均薪资,并且统计每个职位中的男性和女性的数量: import pandas as pd # 导入csv数据集 data = pd.read_csv('employee.csv') # 使用groupby函数进行分组统计 grouped = data.groupby('position') # 使用agg函数进行聚合运算 result = grouped.agg({'salary':'mean', 'sex':'size'}) print(result) 以上代码中,我们使用agg函数同时统计了salary的平均值和sex的数量。agg函数接收一个字典作为参数,key表示要聚合的字段,value表示聚合的方式。最后我们打印了结果。 3. 自定义分组函数 在实际数据分析中,我们可能需要根据自定义规则进行分组。此时,我们可以自定义一个分组函数,然后将该函数作为参数传递给groupby函数。 下面以一个购物车数据集为例,假设我们希望根据商品价格进行分组,将价格在100元以下的商品归为一组,100-500元的商品归为第二组,500元以上的商品归为第三组: import pandas as pd # 导入csv数据集 data = pd.read_csv('shopping_cart.csv') # 定义分组函数 def group_func(price): if price < 100: return '0-99' elif price < 500: return '100-499' else: return '500+' # 使用apply函数进行自定义分组 result = data.groupby(data['price'].apply(group_func))['quantity'].sum() print(result) 以上代码中,我们定义了一个自定义分组函数group_func,该函数将价格进行分组。然后使用apply函数将数据分组,并使用sum函数聚合quantity字段。最后我们打印了结果。 总的来说,Python中的pandas库是一种高效的数据处理工具,其中的dataframe对象可以被用来存储和组织大量的数据集。使用dataframe进行分组统计可以非常方便快捷地获取我们所需要的数据。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值