打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
pandas基础:使用Python pandas Groupby函数汇总数据,获得对数据更好地理解
userphoto

2022.09.08 四川

关注

excelperfect

标签:PythonExcel, pandas

Python中,pandas groupby()函数提供了一种方便的方法,可以按照我们想要的任何方式汇总数据。实际上,groupby()函数不仅仅是汇总。我们将介绍一个如何使用该函数的实际应用程序,然后深入了解其后台的实际情况,即所谓的“拆分-应用-合并”过程。

跟踪信用卡消费的简单工具

现在几乎每个人都有信用卡,使用非常方便,只需轻触或轻扫即可完成交易。然而,在每个付款期结束时,你有没有想过“我到底把这些钱花在哪里了?”。因此,本文的目标是从我们的信用卡交易数据中,通过分析获得对数据的理解,从而了解一些关于我们自己消费的习惯,也许能制定一个行动计划来帮助改善我们的个人财务状况。

注:为方便演示,在知识星球完美Excel社群中有一个包含一份模拟的信用卡账单的示例文件cc_statement.csv

让我们看看有哪些数据可用。首先,将它加载到Python环境中。注意,在read_cvs行中,包含了一个parse_dates参数,以指示“Transaction Date”列是日期时间类型的数据,这将使以后的处理更容易。

import pandas as pd

df =pd.read_csv(r'D:\cc_statement.csv', parse_dates=['Transaction Date'])

如果我们现在不指定这个parse_dates参数,pandas可能会认为该列是文本数据。将文本转换为datetime类型的另一种方法是使用以下命令:

df['Transaction Date'] =pd.to_datetime(df['Transaction Date'])

下面的快速检查显示有533/交易,有交易日期、购买说明、购买类别和金额(debit借方指现金流出/我们的支出,credit贷方指现金流入/信用卡支付)。

1

另外,在“Tansaction Date”列中使用descripe()函数表明我们正在处理2020年全年数据(min=2020-01-02max=2020-12-30)。datetime_is_numeric参数还可以帮助pandas理解我们使用的是datetime类型的数据。

2

添加更多信息到我们的数据中

继续为我们的交易增加两列:天数和月份。因为已经指定“Transaction Date”列是一个类似datetime的对象,所以我们可以通过.dt访问器访问这些属性,该访问器允许向量化操作,即pandas处理数据的合适方式。

df['Day'] = df['TransactionDate'].dt.day_name()

df['Month'] = df['TransactionDate'].dt.month

day_name()返回日期的名称,例如周一到周日,而月份返回给定月份的数值(1-12)。

使用groupby汇总数据

无组织的交易数据不会提供太多价值,但当我们以有意义的方式组织和汇总它们时,可以对我们的消费习惯有更多的了解。看看下面的例子。

在下面的示例中,我们首先按星期几对数据进行分组,然后指定要查看的列——“Debit(借方)”,最后对分组数据的“Debit”列执行操作:计数或求和。下面的总结告诉我们,在星期五购物最多(按交易数量计算),而在星期天花费最多(以美元计)。

3

实际上,我们可以使用groupby对象的.agg()方法将上述两行代码组合成一行,只需将字典传递到agg()。字典键是我们要处理的数据列,字典值(可以是单个值或列表)是我们要执行的操作。

4

5

使用字典方式,除非使用rename()方法,否则无法更改列名。要更改agg()方法中的列名,我们需要执行以下操作:

  • 关键字是新的列名

  • 这些值是命名元组 pd.namedagh,第一个参数用于列,第二个参数用于指定操作

6

pd.NamedAgg是一个名称元组,也允许使用正则元组,因此我们可以进一步简化上述内容:

7

按多列分组

记住,我们的目标是希望从我们的支出数据中获得一些见解,并尝试改善个人财务状况。“Fee手续费/Interest利息费”类别看起来可疑,也想看看是否可以减少一些“Entertainment娱乐”费用,所以我们将这些费用分解为每月的数字。

我们将仅从类别中选择“Entertainment”和“Fee/Interest Charge”,并检查新数据集。

8

似乎我们几乎每个月都要支付“Fee手续费/Interest利息费”,这是一个明显的危险信号,也是一个不良的消费习惯,也许我们没有及时偿还信用卡,导致了这些利息费。我们应该更加关注付款期限,更加努力按时付款。

现在,你已经基本了解了如何使用pandas groupby函数汇总数据。下面讨论当使用该函数时,后台是怎么运作的。

Pandas groupby:拆分-应用-合并的过程

本质上,groupby指的是涉及以下一个或多个步骤的流程:

  • Split拆分:将数据拆分为组

  • Apply应用:将操作单独应用于每个组(从拆分步骤开始)

  • Combine合并:将结果合并在一起

Split数据集

拆分数据发生在groupby()阶段。按支出类别拆分数据,结果实际上是一个DataFrameGroupBy对象。如果只是将其打印出来,则很难想象该对象是什么:

9

好消息是,我们可以迭代GroupBy对象来查看其中的内容。完整的输出太长,所以这里只显示其中一些:

10

注意到这个项目周围的括号了吗?它看起来像一个包含文本和数据框架的元组……让我们通过打印GroupBy对象中每个项目的类型来确认这一点。

11

现在我们已经确认了!GroupBy对象包含一组元组(每组一个)。在元组中,第一个元素是类别名称,第二个元素是属于特定类别的子集数据。因此,这是拆分步骤。

我们也可以使用内置属性或方法访问拆分的数据集,而不是对其进行迭代。例如,属性groups为我们提供了一个字典,其中包含属于给定组的行的组名(字典键)和索引位置。

12

要获得特定的组,简单地使用get_group()

13

应用操作

一旦有了拆分数据集,就可以轻松地对数据子集应用操作。要计算“Fee/Interest Charge”组的总开支,可以简单地将“Debit”列相加。

14

可能还注意到,我们可以使用.loc方法获得与上面的groupby方法完全相同的结果。然而,.loc方法一次只执行一个操作,而groupby方法自动对每个组应用相同的操作。

15

如果我们要使用.loc方法复制split&apply过程,如下所示。我们还将.locgroupby方法进行了比较。很明显,后者肯定更易于使用,并且还将结果放回数据框架结构中,这对于进一步处理更为方便。

16

17

合并结果

最后,合并步骤很容易从我们上面获得的结果中可视化,它基本上将结果放回数据框架中,并以更有意义的方式显示,就像图17中的结果一样。

注:本文学习整理自pythoninoffice.com

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
零基础入门到精通:Python大数据与机器学习之Pandas数据分组
Pandas高级函数transform使用指南
用pandas进行数据分析实战
Pandas速查卡-Python数据科学
Python学习教程:从Excel到Python:最常用到的Pandas函数(下)
从Excel进阶到Python:掌握数据透视表
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服