迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

如何用 group-by 和 sum 获得 Pandas 总和

作者:迹忆客 最近更新:2024/04/20 浏览次数:

我们将演示如何获取 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

上一篇:如何按一列的值对 Pandas DataFrame 进行排序

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Python 中将 Tensor 转换为 NumPy 数组

发布时间:2024/03/12 浏览次数:120 分类:Python

在 Python 中,可以使用 3 种主要方法将 Tensor 转换为 NumPy 数组:Tensor.numpy()函数,Tensor.eval()函数和 TensorFlow.Session()函数。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便