Pandas 累计统计函数【cumsum、cumprod、cummax、cummin】【计算前1/2/3/…/n个数的和、积、最大值、最小值】

news2024/11/18 5:39:58

一、累计统计函数

函数作用
cumsum计算前1/2/3/…/n个数的和
cummax计算前1/2/3/…/n个数的最大值
cummin计算前1/2/3/…/n个数的最小值
cumprod计算前1/2/3/…/n个数的积
import numpy as np
import pandas as pd

# np.nan :空值
df = pd.DataFrame({'key1': np.arange(10),
                   'key2': np.random.rand(10) * 10})
print("df = \n", df)
print('-' * 200)

key1_cumsum = df['key1'].cumsum()
key2_cumsum = df['key2'].cumsum()

print("key1_cumsum = \n{0} \ntype(key1_cumsum) = {1}".format(key1_cumsum, type(key1_cumsum)))
print('-' * 50)
print("key2_cumsum = \n{0} \ntype(key2_cumsum) = {1}".format(key2_cumsum, type(key2_cumsum)))
print('-' * 50)
df['key1_cumsum'] = df['key1'].cumsum()
df['key2_cumsum'] = df['key2'].cumsum()
print("添加cumsum样本的累计和之后: df = \n", df)
print('-' * 200)

key1_cumprod = df['key1'].cumprod()
key2_cumprod = df['key2'].cumprod()

print("key1_cumprod = \n{0} \ntype(key1_cumprod) = {1}".format(key1_cumprod, type(key1_cumprod)))
print('-' * 50)
print("key2_cumprod = \n{0} \ntype(key2_cumprod) = {1}".format(key2_cumprod, type(key2_cumprod)))
print('-' * 50)
df['key1_cumprod'] = key1_cumprod
df['key2_cumprod'] = key2_cumprod
print("添加cumprod样本的累计积之后: df = \n", df)
print('-' * 200)

# cummax,cummin分别求累计最大值,累计最小值,会填充key1,和key2的值,返回新的对象
df1 = df.cummax()
df2 = df.cummin()

print("df = \n", df)
print('-' * 50)
print("df1 = df.cummax() = \n", df1)
print('-' * 50)
print("df2 = df.cummin() = \n", df2)
print('-' * 200)

打印结果:

df = 
    key1      key2
0     0  5.946567
1     1  6.500338
2     2  0.517269
3     3  6.888832
4     4  0.029891
5     5  6.908777
6     6  4.522801
7     7  6.755125
8     8  6.676930
9     9  3.002233
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
key1_cumsum = 
0     0
1     1
2     3
3     6
4    10
5    15
6    21
7    28
8    36
9    45
Name: key1, dtype: int32 
type(key1_cumsum) = <class 'pandas.core.series.Series'>
--------------------------------------------------
key2_cumsum = 
0     5.946567
1    12.446905
2    12.964174
3    19.853006
4    19.882897
5    26.791673
6    31.314474
7    38.069599
8    44.746529
9    47.748762
Name: key2, dtype: float64 
type(key2_cumsum) = <class 'pandas.core.series.Series'>
--------------------------------------------------
添加cumsum样本的累计和之后: df = 
    key1      key2  key1_cumsum  key2_cumsum
0     0  5.946567            0     5.946567
1     1  6.500338            1    12.446905
2     2  0.517269            3    12.964174
3     3  6.888832            6    19.853006
4     4  0.029891           10    19.882897
5     5  6.908777           15    26.791673
6     6  4.522801           21    31.314474
7     7  6.755125           28    38.069599
8     8  6.676930           36    44.746529
9     9  3.002233           45    47.748762
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
key1_cumprod = 
0    0
1    0
2    0
3    0
4    0
5    0
6    0
7    0
8    0
9    0
Name: key1, dtype: int32 
type(key1_cumprod) = <class 'pandas.core.series.Series'>
--------------------------------------------------
key2_cumprod = 
0        5.946567
1       38.654696
2       19.994865
3      137.741271
4        4.117176
5       28.444652
6      128.649488
7      869.043329
8     5802.541623
9    17420.580379
Name: key2, dtype: float64 
type(key2_cumprod) = <class 'pandas.core.series.Series'>
--------------------------------------------------
添加cumprod样本的累计积之后: df = 
    key1      key2  key1_cumsum  key2_cumsum  key1_cumprod  key2_cumprod
0     0  5.946567            0     5.946567             0      5.946567
1     1  6.500338            1    12.446905             0     38.654696
2     2  0.517269            3    12.964174             0     19.994865
3     3  6.888832            6    19.853006             0    137.741271
4     4  0.029891           10    19.882897             0      4.117176
5     5  6.908777           15    26.791673             0     28.444652
6     6  4.522801           21    31.314474             0    128.649488
7     7  6.755125           28    38.069599             0    869.043329
8     8  6.676930           36    44.746529             0   5802.541623
9     9  3.002233           45    47.748762             0  17420.580379
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
df = 
    key1      key2  key1_cumsum  key2_cumsum  key1_cumprod  key2_cumprod
0     0  5.946567            0     5.946567             0      5.946567
1     1  6.500338            1    12.446905             0     38.654696
2     2  0.517269            3    12.964174             0     19.994865
3     3  6.888832            6    19.853006             0    137.741271
4     4  0.029891           10    19.882897             0      4.117176
5     5  6.908777           15    26.791673             0     28.444652
6     6  4.522801           21    31.314474             0    128.649488
7     7  6.755125           28    38.069599             0    869.043329
8     8  6.676930           36    44.746529             0   5802.541623
9     9  3.002233           45    47.748762             0  17420.580379
--------------------------------------------------
df1 = df.cummax() = 
    key1      key2  key1_cumsum  key2_cumsum  key1_cumprod  key2_cumprod
0     0  5.946567            0     5.946567             0      5.946567
1     1  6.500338            1    12.446905             0     38.654696
2     2  6.500338            3    12.964174             0     38.654696
3     3  6.888832            6    19.853006             0    137.741271
4     4  6.888832           10    19.882897             0    137.741271
5     5  6.908777           15    26.791673             0    137.741271
6     6  6.908777           21    31.314474             0    137.741271
7     7  6.908777           28    38.069599             0    869.043329
8     8  6.908777           36    44.746529             0   5802.541623
9     9  6.908777           45    47.748762             0  17420.580379
--------------------------------------------------
df2 = df.cummin() = 
    key1      key2  key1_cumsum  key2_cumsum  key1_cumprod  key2_cumprod
0     0  5.946567            0     5.946567             0      5.946567
1     0  5.946567            0     5.946567             0      5.946567
2     0  0.517269            0     5.946567             0      5.946567
3     0  0.517269            0     5.946567             0      5.946567
4     0  0.029891            0     5.946567             0      4.117176
5     0  0.029891            0     5.946567             0      4.117176
6     0  0.029891            0     5.946567             0      4.117176
7     0  0.029891            0     5.946567             0      4.117176
8     0  0.029891            0     5.946567             0      4.117176
9     0  0.029891            0     5.946567             0      4.117176
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Process finished with exit code 0

二、累计统计函数怎么用?

在这里插入图片描述
以上这些函数可以对series和dataframe操作

这里我们按照时间的从前往后来进行累计

  • 排序
    # 排序之后,进行累计求和
    data = data.sort_index()
    
  • 对p_change进行求和
    stock_rise = data['p_change']
    # plot方法集成了前面直方图、条形图、饼图、折线图
    stock_rise.cumsum()
    
    2015-03-02      2.62
    2015-03-03      4.06
    2015-03-04      5.63
    2015-03-05      7.65
    2015-03-06     16.16
    2015-03-09     16.37
    2015-03-10     18.75
    2015-03-11     16.36
    2015-03-12     15.03
    2015-03-13     17.58
    2015-03-16     20.34
    2015-03-17     22.42
    2015-03-18     23.28
    2015-03-19     23.74
    2015-03-20     23.48
    2015-03-23     23.74
    

使用matplotlib画出连续求和的结果:

在这里插入图片描述

如果要使用plot函数,需要导入matplotlib.

import matplotlib.pyplot as plt
# plot显示图形
stock_rise.cumsum().plot()
# 需要调用show,才能显示出结果
plt.show()

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

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

相关文章

LoRa知识点记录

CFO(Central Frequency Offset):&#xff1a;不同设备之间的硬件缺陷引起的&#xff0c;会造成bin 偏移。CFO 引起的 bin 偏移对于preamble和data symbol 都是相同的。 我们在FFT之前应用汉明窗口来抑制旁瓣的影响 lora的灵敏度依赖于峰值高度 没有零填充会导致峰值高度不稳定 …

什么是NoSQL?什么是redis?redis是做什么的?

redis官网 NoSQL泛指非关系型数据库&#xff0c;redis是其中的一种&#xff0c;Redis是发展最快的。 什么是NoSQL&#xff1f; NoSQL是一个广义的术语&#xff0c;指的是非关系型数据库&#xff0c;不同于传统的关系型数据库&#xff08;如MySQL、Oracle等&#xff09;。它没有…

反转链表(图解)

LCR 024. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给定单链表的头节点 head &#xff0c;请反转链表&#xff0c;并返回反转后的链表的头节点。 样例输入 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&…

Spring 如何自己创建一个IOC 容器

IOC(Inversion of Control),意思是控制反转&#xff0c;不是什么技术&#xff0c;而是一种设计思想&#xff0c;IOC意味着将你设计好的对象交给容器控制&#xff0c;而不是传统的在你的对象内部直接控制。 在传统的程序设计中&#xff0c;我们直接在对象内部通过new进行对象创建…

基础课6——开放领域对话系统架构

开放领域对话系统是指针对非特定领域或行业的对话系统&#xff0c;它可以与用户进行自由的对话&#xff0c;不受特定领域或行业的知识和规则的限制。开放领域对话系统需要具备更广泛的语言理解和生成能力&#xff0c;以便与用户进行自然、流畅的对话。 与垂直领域对话系统相比…

ChatGPT + DALL·E 3

参考链接&#xff1a; https://chat.xutongbao.top/

excel怎么能锁住行 和/或 列的自增长,保证粘贴公式的时候不自增长或者只有部分自增长

例如在C4单元格中输入了公式&#xff1a; 现在如果把C4拷贝到C5&#xff0c;D3会自增长为D4&#xff1a; 现在如果想拷贝的时候不自增长&#xff0c;可以先把光标放到C4单元格&#xff0c;然后按F4键&#xff0c;行和列的前面加上了$符号&#xff0c;锁定了&#xff1a; …

竞赛 题目:基于大数据的用户画像分析系统 数据分析 开题

文章目录 1 前言2 用户画像分析概述2.1 用户画像构建的相关技术2.2 标签体系2.3 标签优先级 3 实站 - 百货商场用户画像描述与价值分析3.1 数据格式3.2 数据预处理3.3 会员年龄构成3.4 订单占比 消费画像3.5 季度偏好画像3.6 会员用户画像与特征3.6.1 构建会员用户业务特征标签…

一文了解ChatGPT Plus如何完成论文写作和AI绘图

2023年我们进入了AI2.0时代。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车&#xff0c;就有可能被淘汰在这个数字化时代&#xff0c;如何能高效地处理文本、文献查阅、PPT…

SSL证书哪个品牌最好用?

现在市面上的SSL证书品牌有很多&#xff0c;选购SSL证书时有很多人并不是很清楚&#xff0c;因此有很多伙伴对于选择哪个SSL证书品牌而感到疑惑。今天JoySSL小编就专门介绍下哪些比较好用的SSL证书品牌。 SSL证书兼容性主要包含操作系统、浏览器、服务器三个方面&#xff0c;好…

SpringBoot-过滤器Filter+JWT令牌实现登录验证

登录校验-Filter 分析 过滤器Filter的快速入门以及使用细节我们已经介绍完了&#xff0c;接下来最后一步&#xff0c;我们需要使用过滤器Filter来完成案例当中的登录校验功能。 我们先来回顾下前面分析过的登录校验的基本流程&#xff1a; 要进入到后台管理系统&#xff0c;我…

windows Oracle Database 19c 卸载教程

目录 打开任务管理器 停止数据库服务 Universal Installer 卸载Oracle数据库程序 使用Oracle Installer卸载 删除注册表项 重新启动系统 打开任务管理器 ctrlShiftEsc可以快速打开任务管理器&#xff0c;找到oracle所有服务然后停止。 停止数据库服务 在开始卸载之前&a…

数据库大事记

数据库分类分类方法为&#xff1a;按数据模型分类、按业务类型分类、按部署方式分类、按存储介质分类。 按数据模型分类 按业务类型分类 按部署方式分类 按存储介质分类 喜欢点赞收藏&#xff0c;下期再见。

torch - 张量Tensor简介与创建

张量是什么&#xff1f; 张量就是多维数组&#xff0c;0维张量叫标量&#xff0c;1维张量是向量&#xff0c;2维张量是矩阵&#xff0c;灰度图片大多都使用2维张量所表示的&#xff0c;3维张量一般用于RGB图片的表示。 张量的属性 其中后四个是用于Tensor自动求导。前四个和T…

什么是CDN?什么是安全加速CDN?有什么优势?

安全加速CDN(Content Delivery Network)是一种网络架构&#xff0c;它通过在全球范围内部署服务器并缓存静态和动态内容来提供更快的Web页面加载和更好的用户体验。安全加速CDN可以保护网站免受DDoS攻击、恶意软件和其他安全威胁&#xff0c;从而提高网站的可用性和稳定性。它通…

一个美观且功能丰富的 .NET 控制台应用程序开源库

推荐一个美观且功能丰富的 .NET 控制台应用程序开源库&#xff0c;从此告别黑漆漆的界面。 01 项目简介 Spectre.Console 是一个开源的 .NET 库&#xff0c;用于创建美观、功能丰富的控制台&#xff08;命令行&#xff09;应用程序。它提供了一组易于使用的 API&#xff0c;…

在QGIS中加载显示3DTiles数据

“我们最近有机会在QGIS 3.34中实现一个非常令人兴奋的功能–能够以“Cesium 3D Tiles”格式加载和查看3D内容&#xff01;” ——QGIS官方的 宣传介绍。 体验一下&#xff0c;感觉就是如芒刺背、如坐针毡、如鲠在喉。 除非我电脑硬件有问题&#xff0c;要么QGIS的3Dtiles是真…

《网络协议》08. 概念补充

title: 《网络协议》08. 概念补充 date: 2022-10-06 18:33:04 updated: 2023-11-17 10:35:52 categories: 学习记录&#xff1a;网络协议 excerpt: 代理、VPN、CDN、网络爬虫、无线网络、缓存、Cookie & Session、RESTful。 comments: false tags: top_image: /images/back…

阿里云服务器 手动搭建WordPress(CentOS 8)

前提条件 已创建Linux操作系统的ECS实例&#xff0c;并且手动部署LNMP环境&#xff0c;具体操作&#xff0c;请参见手动部署LNMP环境&#xff08;CentOS 8&#xff09;。本教程使用的相关资源版本如下。 实例规格&#xff1a;ecs.c6.large 操作系统&#xff1a;公共镜像CentO…

2023年软件安装管家目录最新

软件目录 ①【电脑办公】电脑系统&#xff08;直接安装&#xff09;Win7Win8Win10OfficeOffice激活office2003office2007office2010office2013office2016office2019office365office2021wps2021Projectproject2007project2010project2016project2019project2013project2021Visio…