如何用 group-by 和 sum 获得 Pandas 总和
Asad Riaz 2023年1月30日 Pandas Pandas DataFrame

我们将演示如何获取 Pandas 的 groupby 和 sum 的总和。我们还将研究 pivot
功能,以将数据排列在一个漂亮的表中,以及如何定义自定义函数并将其应用到 DataFrame
上。我们还能通过使用 agg()
获得总和。
groupby
的累计总和
我们可以使用 groupby
方法来获得累计和。比如以下具有日期,水果名称和销售的 DataFrame
:
import pandas as pd df = pd.DataFrame( { "Date": ["08/09/2018", "10/09/2018", "08/09/2018", "10/09/2018"], "Fruit": [ "Apple", "Apple", "Banana", "Banana", ], "Sale": [34, 12, 22, 27], } )
如果我们要计算每个水果在每个日期的累计销售总额,则可以执行以下操作:
import pandas as pd df = pd.DataFrame( { "Date": ["08/09/2018", "10/09/2018", "08/09/2018", "10/09/2018"], "Fruit": [ "Apple", "Apple", "Banana", "Banana", ], "Sale": [34, 12, 22, 27], } ) print(df.groupby(by=["Fruit", "Date"]).sum().groupby(level=[0]).cumsum())
输出:
Fruit Date Sale Apple 08/09/2018 34 10/09/2018 46 Banana 08/09/2018 22 10/09/2018 49
pivot()
在一个漂亮的表中重新排列数据
pivot()
方法可以设置表格的行和列属性。让我们更改上面的代码,并应用 pivot()
方法重新排列漂亮表中的数据:
import pandas as pd df = pd.DataFrame( { "Date": ["08/09/2018", "10/09/2018", "08/09/2018", "10/09/2018"], "Fruit": [ "Apple", "Apple", "Banana", "Banana", ], "Sale": [34, 12, 22, 27], } ) print( df.groupby(["Fruit", "Date"], as_index=False).sum().pivot("Fruit", "Date").fillna(0) )
输出:
Sale Date 08/09/2018 10/09/2018 Fruit Apple 34 12 Banana 22 27
Pandas 中将函数应用于 groupby
我们将创建一个简单的方法来获取 series
或一维数组中的值计数,并使用 groupby
来获取每个值的总计数:
from pandas import * d = {"series": Series(["1", "2", "1", "1", "4", "4", "5"])} df = DataFrame(d) def get_count(values): return len(values) grouped_count = df.groupby("series").series.agg(get_count) print(grouped_count)
运行代码后,我们将获得以下输出,该输出提供 series
中每个值的出现次数。
输出:
series 1 3 2 1 4 2 5 1 Name: series, dtype: int64
agg()
获取列的总和
我们可以使用 agg()
在列上应用求和运算。考虑以下代码:
import pandas as pd df = pd.DataFrame( { "Date": ["08/09/2018", "10/09/2018", "08/09/2018", "10/09/2018"], "Fruit": [ "Apple", "Apple", "Banana", "Banana", ], "Sale": [34, 12, 22, 27], } ) print(df.groupby(["Fruit"])["Sale"].agg("sum"))
输出:
Fruit Apple 46 Banana 49 Name: Sale, dtype: int64
Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe