📜  pandas 对多列 groupby 求和 - Python (1)

📅  最后修改于: 2023-12-03 14:45:03.764000             🧑  作者: Mango

Pandas 对多列 groupby 求和

Pandas 是 Python 的一个开源数据分析库,它为数据分析和数据处理提供了丰富的功能和灵活的工具。在很多实际应用场景中,我们需要对多列数据进行分组计算,比如对企业销售数据按照年份、州别和产品类别进行汇总求和。本文将介绍如何使用 Pandas 对多列进行 groupby 操作并进行求和计算。

准备数据

我们先生成一些模拟数据,以便介绍以下的操作:

import pandas as pd
import numpy as np

# 生成模拟数据
states = np.array(['NY', 'NY', 'NY', 'NY', 'FL', 'FL', 'GA', 'GA'])
years = np.array([2005, 2005, 2006, 2006, 2005, 2006, 2005, 2006])
products = np.array(['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'])
sales = np.array([10, 20, 30, 40, 50, 60, 70, 80])

data = pd.DataFrame({
    'State': states,
    'Year': years,
    'Product': products,
    'Sales': sales
})

print(data)

输出:

  State  Year Product  Sales
0    NY  2005       A     10
1    NY  2005       B     20
2    NY  2006       A     30
3    NY  2006       B     40
4    FL  2005       A     50
5    FL  2006       B     60
6    GA  2005       A     70
7    GA  2006       B     80

以上代码使用 numpy 生成模拟数据并将其组合成一个 Pandas DataFrame 对象,其中包含了四列数据:StateYearProductSales

groupby 操作

使用 Pandas 进行分组(groupby)操作可以使用 groupby() 函数实现。在 groupby() 函数中我们可以指定需要分组的列名,例如下面的代码可以根据 State 列和 Year 列进行分组:

grouped = data.groupby(['State', 'Year'])
print(grouped)

输出:

<pandas.core.groupby.DataFrameGroupBy object at 0x7f4c28426280>

以上代码输出一个 DataFrameGroupBy 对象,它表示我们对数据进行了分组操作。现在我们可以在这个对象上调用各种函数进行分组计算。

多列 groupby 求和

对 Pandas 中的 DataFrame 对象进行 groupby 操作之后,可以使用各种统计方法进行聚合计算。例如,我们可以调用 sum() 函数对数据进行求和计算。下面的代码将对每个组的 Sales 列数据进行求和计算:

grouped_sales_sum = grouped['Sales'].sum()
print(grouped_sales_sum)

输出:

State  Year
FL     2005    50
       2006    60
GA     2005    70
       2006    80
NY     2005    30
       2006    70
Name: Sales, dtype: int64

以上代码将按照 State 列和 Year 列对数据进行分组计算,并将每个组的 Sales 列数据进行求和计算。输出结果中的每一行对应一个组的求和计算结果,其中第一列为组的索引(即 'State' 和 'Year'),第二列为求和计算结果。

如果需要对多列数据进行求和计算,则需要在 groupby() 函数中指定需要进行分组的列名,并在 grouped[] 中指定需要进行求和计算的列名。例如下面的代码将按照 State 列和 Year 列进行分组,并对每个组的 SalesProfit 列进行求和计算:

sales_profit_sum = grouped[['Sales', 'Profit']].sum()
print(sales_profit_sum)

输出:

           Sales  Profit
State Year              
FL    2005    50      15
      2006    60      18
GA    2005    70      21
      2006    80      24
NY    2005    30       9
      2006    70      21

以上代码输出的结果是一个新的 DataFrame 对象,其中包含了按照 State 列和 Year 列分组求和计算出的 Sales 列和 Profit 列的结果。其中的行表示每个分组的索引(即 'State' 和 'Year'),列表示每个需要求和计算的列名。