pandas.Grouper() 在实际项目中非常有用,尤其是在处理时间序列数据、财务数据或多级索引数据时

pandas.Grouper() 在实际项目中非常有用,尤其是在处理时间序列数据、财务数据或多级索引数据时。以下是几个实际场景的例子,展示了如何使用 pandas.Grouper() 进行数据分组,并用数值示例说明。

1. 按月分组进行销售数据汇总

场景: 一个电商平台的销售数据,包含订单日期和销售额,要求按月汇总每月的总销售额。

数据示例:

import pandas as pd# 创建示例数据
data = {'order_date': ['2023-01-01', '2023-01-15', '2023-02-01', '2023-02-15', '2023-03-01', '2023-03-15'],'sales': [150, 200, 180, 220, 250, 300]
}
df = pd.DataFrame(data)
df['order_date'] = pd.to_datetime(df['order_date'])# 使用Grouper按月分组
monthly_sales = df.groupby(pd.Grouper(key='order_date', freq='ME')).sum()print(monthly_sales)

输出:

            sales
order_date        
2023-01-31    350
2023-02-28    400
2023-03-31    550

解释: 在这个例子中,Grouper 被用来根据 order_date 列按月进行分组,聚合函数是求和 (sum),结果显示每个月的总销售额。

2. 按季度分组进行平均销售额分析

场景: 按季度分析某产品的平均销售额,以便做季节性销售预测。

数据示例:

# 创建示例数据
data = {'order_date': ['2023-01-01', '2023-04-01', '2023-07-01', '2023-10-01'],'sales': [120, 150, 200, 180]
}
df = pd.DataFrame(data)
df['order_date'] = pd.to_datetime(df['order_date'])# 使用Grouper按季度分组
quarterly_sales = df.groupby(pd.Grouper(key='order_date', freq='QE')).mean()print(quarterly_sales)

输出:

            sales
order_date        
2023-03-31    120
2023-06-30    150
2023-09-30    200
2023-12-31    180

解释: Grouper 根据 order_date 列按季度进行分组(freq='Q'),并计算每个季度的平均销售额。季度之间的销售波动可以通过这种方式进行分析。

3. 按天分组处理时间序列数据

场景: 假设你有一个股票市场数据集,每个交易日的股票价格需要按天进行分组,计算每日的最大、最小价格。

数据示例:

# 创建示例数据
data = {'date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02', '2023-01-03'],'price': [100, 110, 105, 107, 108]
}
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])# 按天分组并计算每一天的最大和最小股票价格
daily_prices = df.groupby(pd.Grouper(key='date', freq='D')).agg({'price': ['max', 'min']})print(daily_prices)

输出:

            price          max  min
date                     
2023-01-01     110  100
2023-01-02     107  105
2023-01-03     108  108

解释: 这里我们使用 Grouper 按天 (freq='D') 对数据进行分组,并使用 agg 方法分别计算每一天的最大和最小股票价格。

4. 按多个层级进行分组(多级索引)

场景: 假设你有一个包含多个地区和年份的销售数据,要求按地区和年份进行分组,计算每个地区每年的总销售额。

数据示例:

# 创建示例数据
data = {'region': ['North', 'North', 'South', 'South', 'North', 'South'],'year': [2021, 2022, 2021, 2022, 2021, 2022],'sales': [100, 150, 120, 180, 200, 250]
}
df = pd.DataFrame(data)
df.set_index(['region', 'year'], inplace=True)# 使用Grouper按年份分组并计算总销售额
sales_by_region_year = df.groupby(pd.Grouper(level='year')).sum()print(sales_by_region_year)

输出:

         sales
year           
2021      420
2022      580

解释: 在这个例子中,Grouper 被用来按 year 进行分组。通过 level='year' 来指定我们要根据 year 这一层级来进行分组,并计算每个年份的总销售额。set_index 用来创建多级索引。

5. 按自定义时间频率分组

场景: 假设你有一个包含分钟级别时间戳的传感器数据集,要求按每小时分组进行统计。

数据示例:

# 创建示例数据
data = {'timestamp': ['2023-01-01 00:01', '2023-01-01 00:30', '2023-01-01 01:00', '2023-01-01 01:15'],'value': [10, 15, 20, 25]
}
df = pd.DataFrame(data)
df['timestamp'] = pd.to_datetime(df['timestamp'])# 按每小时分组
hourly_data = df.groupby(pd.Grouper(key='timestamp', freq='H')).sum()print(hourly_data)

输出:

                     value
timestamp                 
2023-01-01 00:00:00     25
2023-01-01 01:00:00     45

解释: 使用 freq='H' 可以按小时对数据进行分组,求出每小时的数据汇总。即使原数据的时间戳是分钟级别,Grouper 会自动按小时进行对齐并汇总。

总结:

pandas.Grouper() 可以处理各种实际问题,尤其是在时间序列数据和多层级数据的处理上,能够灵活地按不同的时间频率、层级或条件对数据进行分组,并进行各种统计分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/65001.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

private static final Logger log = LoggerFactory.getLogger()和@Slf4j的区别

一、代码方面 - private static final Logger log LoggerFactory.getLogger()方式 详细解释 这是一种传统的获取日志记录器(Logger)的方式。LoggerFactory是日志框架(如 Log4j、Logback 等)提供的工厂类,用于创建Lo…

医疗数仓Hive安装部署

Hive安装部署 Hive安装部署 1)把hive-3.1.3.tar.gz上传到linux的/opt/software目录下 2)解压hive-3.1.3.tar.gz到/opt/module/目录下面 [atguiguhadoop102 software]$ tar -zxvf /opt/software/hive-3.1.3.tar.gz -C /opt/module/3)修改hive…

通俗易懂的讲一下Vue的双向绑定和React的单向绑定

1.Vue 的双向绑定&#xff1a; <template><!-- 输入框和数据自动绑定&#xff0c;就像连体婴儿&#xff0c;一个动另一个也动 --><input v-model"message"><p>{{ message }}</p><!-- 完整表单示例 --><form><!-- 所有…

使用setup.py打包 HuggingFace PEFT 项目详解:pip install peft的幕后流程

使用 setup.py 打包 HuggingFace PEFT 项目详解 Source: https://github.com/huggingface/peft/blob/main/setup.py 1. 项目简介 HuggingFace 的 PEFT&#xff08;Parameter-Efficient Fine-Tuning&#xff09;库是一个用于高效参数微调的 Python 工具包&#xff0c;支持多种…

BP神经网络的反向传播算法

BP神经网络&#xff08;Backpropagation Neural Network&#xff09;是一种常用的多层前馈神经网络&#xff0c;通过反向传播算法进行训练。反向传播算法的核心思想是通过计算损失函数对每个权重的偏导数&#xff0c;从而调整权重&#xff0c;使得网络的预测输出与真实输出之间…

线程池的创建规范

第1章&#xff1a;引言——为什么使用线程池&#xff1f; 1.1 线程池的概念 线程池是一个容器&#xff0c;用来管理多个工作线程&#xff0c;它通过对线程的管理、复用来提高系统性能。线程池的核心理念是将线程的创建、销毁、复用等操作交给线程池来管理&#xff0c;避免了频…

【蓝桥杯比赛-C++组-经典题目汇总】

1. 最短路 题目描述&#xff1a; 如下图所示&#xff0c;G是一个无向图&#xff0c;其中蓝色边的长度是1、橘色边的长度是2、绿色边的长度是3。 则从 A 到 S 的最短距离是多少&#xff1f; #include <iostream> #include <cstring> using namespace std; const i…

活动预告 | Microsoft 安全在线技术公开课:通过扩展检测和响应抵御威胁

课程介绍 通过 Microsoft Learn 免费参加 Microsoft 安全在线技术公开课&#xff0c;掌握创造新机遇所需的技能&#xff0c;加快对 Microsoft Cloud 技术的了解。参加我们举办的“通过扩展检测和响应抵御威胁”技术公开课活动&#xff0c;了解如何更好地在 Microsoft 365 Defen…

第八节:GLM-4v-9b模型的大语言模型源码解读(ChatGLMForConditionalGeneration)

文章目录 前言一、ChatGLMForConditionalGeneration类源码解读1、ChatGLMForConditionalGeneration类源码2、self.transformer方法源码3、loss_fct = CrossEntropyLoss(ignore_index=-100)方法Demo二、ChatGLMModel类源码解读三、GLMTransformer结构源码解读四、GLMBlock结构源…

Windows onnxruntime编译openvino

理论上来说&#xff0c;可以直接访问 ONNXRuntime Releases 下载 dll 文件&#xff0c;然后从官方文档中下载缺少的头文件以直接调用&#xff0c;但我没有尝试过。 1. 下载 OpenVINO 包 从官网下载 OpenVINO 的安装包并放置在 C:\Program Files (x86) 路径下&#xff0c;例如…

Vue3 中的插槽

Vue3 中插槽的使用&#xff0c;插槽是 Vue 中的一个特别特性&#xff0c;插槽就是模版内容。例如<h1>标题 1</h1>标题 1 就是插槽&#xff0c;Vue 是无法识别模板内容的&#xff0c;只能通过属性进行传递。Slot 主要包括默认、具名和作用域。Slot开发起来难度不大&…

01.02周四F34-Day43打卡

文章目录 1. 地是湿的。昨晚估计下雨了。2. 你可能把包丢在餐厅里了吧?3. 她说他可能误了航班。4. 我本来应该早点来的,但路上特别堵。5. 约翰可能在那次事故中受了重伤。6. 这是一个情景对话7. 我本可以走另一条路的。8. 我准是瘦了不少,你看我这裤子现在多肥。9. 钱没了!会…

深度学习:基于MindSpore NLP的数据并行训练

什么是数据并行&#xff1f; 数据并行&#xff08;Data Parallelism, DP&#xff09;的核心思想是将大规模的数据集分割成若干个较小的数据子集&#xff0c;并将这些子集分配到不同的 NPU 计算节点上&#xff0c;每个节点运行相同的模型副本&#xff0c;但处理不同的数据子集。…

五类推理(逻辑推理、概率推理、图推理、基于深度学习的推理)的开源库 (一)

在开发中&#xff0c;有一些开源库可以实现不同类型的推理&#xff0c;包括逻辑推理、概率推理、图推理、基于深度学习的推理等。以下是五类推理&#xff08;逻辑推理、概率推理、图推理、基于深度学习的推理&#xff09;的现成开源库&#xff0c;它们各自的功能、特点和适用场…

高等数学学习笔记 ☞ 函数的极限

1. 函数的极限定义 备注&#xff1a;已知坐标轴上一点&#xff0c;则&#xff1a; ①&#xff1a;的邻域&#xff1a;指附近的开区间&#xff0c;记作。 ②&#xff1a;的去心邻域&#xff1a;指附近的开区间&#xff0c;但不包含&#xff0c;记作。 ③&#xff1a;的邻域&…

Python用K-Means均值聚类、LRFMC模型对航空公司客户数据价值可视化分析指标应用|数据分享...

全文链接&#xff1a;https://tecdat.cn/?p38708 分析师&#xff1a;Yuling Fang 信息时代的来临使得企业营销焦点从产品中心转向客户中心&#xff0c;客户关系管理成为企业的核心问题&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 客户关系管理的关键是客…

【前端系列】优化axios响应拦截器

文章目录 一、前言&#x1f680;&#x1f680;&#x1f680;二、axios响应拦截器&#xff1a;☀️☀️☀️2.1 为什么前端需要响应拦截器element ui的消息组件 一、前言&#x1f680;&#x1f680;&#x1f680; ☀️ 回报不在行动之后&#xff0c;回报在行动之中。 这个系列可…

【 IEEE 独立出版 · EI核心、Scopus稳定检索 】第二届算法、软件工程与网络安全国际学术会议(ASENS 2025)

ASENS 2025 第二届算法、软件工程与网络安全国际学术会议 2025 2nd International Conference on Algorithms, Software Engineering and Network Security 中国 广州 2025年3月21-23日 会议官网&#xff1a;www.ic-asens.org IEEE 独立出版 EI核心、Scopus快速…

/ete/security/limits.conf参数详解

/ete/security/limits.conf配置文件 内容如下&#xff1a; * soft nofile 65535 * hard nofile 65535参数详解 *: 表示对所有用户生效soft: 表示软限制&#xff0c;即用户可以通过ulimit命令自行调整该值hard: 表示硬限制&#xff0c;即用户无法通过ulimit命令将该值调整超过…

#Vue3篇: 无感刷新token的原理JSESSIONID无感刷新和JWT接口刷新

基于这个后端是怎么更新token的 为了理解后端是如何更新 Token 的&#xff0c;我们需要考虑一个典型的基于 Token 的身份验证流程&#xff0c;特别是涉及 JSESSIONID 和自定义 Token&#xff08;如 JWT, JSON Web Token&#xff09;的情况。 下面我将介绍两种常见的更新 Token …