pandas ( day3)

news2024/11/28 2:34:44

一. Cov()  协方差 

  •       corr()是 相关系数 ,他将 协方差 cov 进一步压缩在 -1  ~ 1 之间 , 
    • 1 是正相关
    • 0 是不相干
    • -1 是 负相关
	A	B	C
0	68	95	66
1	99	87	67
2	87	87	91
3	59	87	72
4	59	91	79
5	82	88	50
6	88	74	85
7	95	67	72
8	95	67	64
9	62	91	86

协方差 计算 :

np.sum ( (df.A - df.A.mean()) * (df.B - df.B.mean()))  / ( df.shape[0] )  这里自由度也是0

这里是 A 和 B 的对比
df.cov(ddof = 0)  自由度为0 是总体的 

	A	       B	      C
A	227.44	-97.56	-34.18
B	-97.56	93.64	4.82
C	-34.18	4.82	136.96

二 . 矩估计 (点估计)

  • 4阶梯 矩(单位)
  • 一阶矩 均值
  • 二阶矩 方差 2次方

var = \sigma^2 = \frac{\Sigma(x_i - \bar{x})^2}{m-1}  

  • 三阶矩 偏度 3次方 (偏度系数)

                数值越大,偏得越厉害

                \sigma^3 = \Sigma(\frac{x_i - \bar{x}}{\sigma})^3

df.skew()

# -1  : 有偏态  正偏态
# 0  : 标准的高斯分布
# 1  : 左偏态  负偏态

          skew = \frac{m}{(m-1)(m-2)} * \sigma^3

         这里的  m 是样本量

  • 四阶矩 峰度 4次方  (峰度系数)
df.kurt()

# -1  : 扁平分布
# 0  : 标准的高度
# 1  : 尖峰分布

                  \sigma^4 = \Sigma(\frac{x_i - \bar{x}}{\sigma})^4

     kurt = \frac{m(m+1)}{(m-1)(m-2)(m-3)} * \sigma^4 - 3\frac{(m-1)^2}{(m-1)(m-2)(m-3)}

三 . 非统计函数

3.1  乘法 :   product()   |    mul()

df 如下
	A	B	C
0	68	95	66
1	99	87	67
2	87	87	91
3	59	87	72
4	59	91	79
5	82	88	50
6	88	74	85
7	95	67	72
8	95	67	64
9	62	91	86


df.product()  一列进行连乘

df.mul(10) 每个数 x 10

3.2 加减除法 , 保留小数

df.add()   加法
df.div()   除法
df.sub()   减法
df.round()   保留几位小数

3.3  空值 

判断是否为空值
isna()  
isnull()


判断是否不为空值
notna()
notnull() 


3.4 值计数

	A	B	C
0	68	95	66
1	99	87	67
2	87	87	91
3	59	87	72
4	59	91	79
5	82	88	50
6	88	74	85
7	95	67	72
8	95	67	64
9	62	91	86


df.A.value_counts()

对A 列进行 计数 ,看出现几次
A
59.0    2
95.0    2
68.0    1
99.0    1
87.0    1
82.0    1
88.0    1
62.0    1
Name: count, dtype: int64

3.5  去重计数   

	A	B	C
0	68	95	66
1	99	87	67
2	87	87	91
3	59	87	72
4	59	91	79
5	82	88	50
6	88	74	85
7	95	67	72
8	95	67	64
9	62	91	86

去重后 计数
df.A.nunique()   # 8



去重 不计数
df.A.unique()

array([68., 99., 87., 59., 82., 88., 95., 62.])

3.6 排序

# 按照A列来升序排列  , False就是降序
df.A.sort_values(ascending= True)
df.sort_values(by= "A",ascending= True)


四. 移动计算

4.1  shift()


df.A
0    68.0                               
1    99.0
2    87.0
3    59.0
4    59.0
5    82.0
6    88.0
7    95.0
8    95.0
9    62.0
Name: A, dtype: float64

df.A.shift(1)   # 所有数往下移一格
0     NaN
1    68.0
2    99.0
3    87.0
4    59.0
5    59.0
6    82.0
7    88.0
8    95.0
9    95.0
Name: A, dtype: float64

4.2  同比增长率   pct_change()

df["A1"] = df.A.shift(1)
	A	B	C	A1
0	68.0	95.0	66.0	NaN
1	99.0	87.0	67.0	68.0
2	87.0	87.0	91.0	99.0
3	59.0	87.0	72.0	87.0
4	59.0	91.0	79.0	59.0
5	82.0	88.0	50.0	59.0
6	88.0	74.0	85.0	82.0
7	95.0	67.0	72.0	88.0
8	95.0	67.0	64.0	95.0
9	NaN	91.0	86.0	95.0


df.pct_change()
# (99-68)/68 = 0.455882

A	B	C	A1
0	NaN	NaN	NaN	NaN
1	0.455882	-0.084211	0.015152	NaN
2	-0.121212	0.000000	0.358209	0.455882
3	-0.321839	0.000000	-0.208791	-0.121212
4	0.000000	0.045977	0.097222	-0.321839
5	0.389831	-0.032967	-0.367089	0.000000
6	0.073171	-0.159091	0.700000	0.389831
7	0.079545	-0.094595	-0.152941	0.073171
8	0.000000	0.000000	-0.111111	0.079545
9	0.000000	0.358209	0.343750	0.000000
df.dtypes

df.支付时间 = df.支付时间.astype("datetime64[ns]")
订单ID             int64
用户ID             int64
地区ID             int64
订单金额           float64
支付时间    datetime64[ns]
dtype: object


提取时间 (hour)

df["时间"] = df.支付时间.dt.hour

df.groupby(by = "时间").订单金额.sum()
按照时间 进行 分组 ,并计算订单金额的总和


4.3   agg()   返回的是dataframe

df_ref = df.groupby(by = "时间").agg({"订单金额":"sum"})
返回的是 dataframe


	订单金额
时间	
0	170800.39
1	46212.68
2	9872.74
3	3955.66
4	1525.86
5	8439.76
6	10410.76
7	31955.27
8	18348.25

4.4 diff()  移动计算  (下面行 - 上面行)

df_ref.diff(1)


	订单金额
时间	
0	170800.39
1	46212.68
2	9872.74
3	3955.66
4	1525.86
5	8439.76
6	10410.76
7	31955.27
8	18348.25


	订单金额
时间	
0	NaN
1	-124587.71
2	-36339.94
3	-5917.08
4	-2429.80
5	6913.90
6	1971.00
7	21544.51
8	-13607.02
9	4820.6

4.5 rank() 

一般不直接这么用  df_ref.rank()   不能对重复值进行排序

drop_duplicates() 多列去重


df_ref.sort_values(by=["订单金额"],ascending = False).drop_duplicates(subset = ["订单金额"]).rank(ascending = False)
 先去重 ,再按照订单金额 从大到小排序



rank_ = df_ref.sort_values(by=["订单金额"],ascending = False).drop_duplicates(subset = ["订单金额"]).rank(ascending = False).rename(columns={"订单金额":"序号"})

rename(columns={"订单金额":"序号"})
给列重新命名  订单金额 改为 序号


s.rank(method = "min")   # 排名时 有重复的话 会把相同的放在同一名, 然后 会跳排名
rank()

s.rank(method = "first") # 排名时 不会跳,相同排名 也 往下, 相当于数 行
row_number

s.rank(method = "dense")   #不会跳排名,相同排名也会放一起

4.6  join()   sort_values()   sort_index()

df_ref.join(rank_).sort_values(by="序号")

将 df_ref 和 rank_ 进行左右的拼接   ,然后按照列 序号进行升序排序



df_ref.join(rank_).sort_values(by="序号").sort_index()

按照行 索引 进行排列 

4.7 rolling()

df_ref.rolling(2).sum()

每两行 进行累加

五. 左右连接

5.1 同时获取多张表

data = pd.read_excel("./电商数据.xlsx",sheet_name=["订单信息","订单详情","地区信息"])
data["订单信息"]

5.2  merge 连接

pd.merge 进行 两表合并  这里不写 On 是 自然连接(同名字段 进行自动连接)
pd.merge(data["订单详情"],data["订单信息"])


深层复制 
订单详情 = data["订单详情"].copy()
订单信息 = data["订单信息"].copy()

5.3  两张表中没有同名字段

#如果没有相同的名称需要手动关联
#如果两列的名称不一致 ,连接以后,关联列都会保留 ,则可以删除一列
pd.merge(订单详情,订单信息,left_on=["ID"],right_on=["订单ID"]).drop(columns=["订单ID"])

 5.4 表的关联字段 被作为了行索引

  •    设置行索引 
#设置某一列为 行索引
订单详情1.set_index(["ID"],inplace=True)
订单信息1.set_index(["订单ID"],inplace=True)
  • 通过 行索引   进行关联
#left_index=True 代表使用 行索引作为关联
#pandas 在1.0.0 版本以后  不强制 是left_index ,也可以使用 left_on
pd.merge(订单详情,订单信息,left_index=True,right_index=True)

5.5 同名列 非关联字段(列名一致,内容无关)

  • 改列名 
   suffixes = ()
将关联列 订单详情2,订单信息2 改名为  _订单详情2 ","_订单信息2
pd.merge(订单详情2,订单信息2,left_index=True,right_index=True,suffixes=("_订单详情2 ","_订单信息2"))


  add_prefix
订单详情2.add_prefix("订单详情2_") #为了防止 列名冲突  提前加上前缀


rename
订单详情2.rename(columns={"支付时间":"xxx时间"})#为了防止 列名冲突  提前修改列名


5.5  连接方式

  • how 连接方式
pd.merge(data["订单信息"],data["地区信息"],how="inner")

5.6多表连接

pd.merge(
    pd.merge(data["订单信息"],data["订单详情"],how="inner"),
    data["地区信息"]
)

六 . 分组依据

  •  groupby :指定一列或者 多列分组        
    • 返回的是DataFrameGroupBy 后面不会直接加聚合函数
    • DataFrameGroupBy.column   ->   SeriesGroupBy.聚合函数 (返回的Series)
      • reset_index : Series 变为 DataFrame
      • un_stack : 行索引 变列索引  (得到透视表)

6.1 把行索引变成列

df.groupby(by=["省份","城市"]).订单金额.sum().reset_index()  #把行索引 恢复成列

 6.2  unstack()  透视表

df.groupby(by=["省份","城市"]).订单金额.sum().unstack(level=0).fillna(0)  # 透视表 把其中一个行索引 转换成列

6.3 多列运算

        

df.groupby(by=["省份","城市"]).agg({"订单金额":["sum","mean"],"数量":"sum"})

6.4 遍历运算

map 是 Series的循环
apply 任意循环
x 代表的是 被分组的 dataframe

# sumx("表",[单价] * [数量])
df.groupby(by=["省份","城市"]).apply(lambda x : (x["单价"] * x["数量"]).sum() )
找个各个 省份 购买 颜色最多的 项
df.groupby(by=["省份"]).apply(lambda x :  ",".join(x.颜色.mode()) )

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

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

相关文章

Sentinel入门流控编码方式

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流…

Dapr(一) 基于云原生了解Dapr

(这期先了解Dapr,之后在推出如何搭建Dapr,以及如何使用。) 目录 引言: Service Mesh定义 Service Mesh解决的痛点 Istio介绍 Service Mesh遇到的挑战 分布式应用的需求 Multiple Runtime 理念推导 Dapr 介绍 Dapr 特性 Dapr 核心…

算法系列--递归,回溯,剪枝的综合应用(1)

💕"对相爱的人来说,对方的心意,才是最好的房子。"💕 作者:Lvzi 文章主要内容:算法系列–递归,回溯,剪枝的综合应用(1) 大家好,今天为大家带来的是算法系列--递归,回溯,剪枝的综合应用(1) 1.全排…

成都直播产业园有哪些特色服务

在成都这片热土上,天府锋巢直播产业基地以其特色服务独树一帜,成为了引领直播行业的先锋。 一、天府锋巢直播产业基地的特色服务,首先体现在其完善的产业链整合能力上。 作为西南大型的成都直播产业园区,这里不仅汇聚了众多优秀…

【C++杂货铺】详解list容器

目录 🌈前言🌈 📁 介绍 📁 使用 📂 构造 📂 迭代器iterator 📂 capacity 📂 modifiers 📂 迭代器失效 📁 模拟实现 📂 迭代器的实现 &#x…

可视化图表:漏斗图,分析转化率的时候最常用。

一、漏斗图的定义和构成 漏斗图是一种可视化工具,用于展示数据的层级关系和变化趋势。它由一系列水平条形组成,每个条形的宽度逐渐减小,呈现出漏斗的形状。漏斗图通常用于分析和比较不同层级的数据,例如销售渠道的转化率、招聘流…

Redis面试题汇总

一、动力节点Redis的书 1. Redis有哪些特性? 2. Redis的IO模型是单线程还是多线程? Redis4.0版本以前是纯粹的单线程模型;从4.0版本开始,处理客户端请求的仍然是单线程模型,但像持久化、对AOF的rewrite、对失效连接的…

Aspect使用

今天在敲苍穹外卖的时候用到了 SpringBoot 中的 AOP,这里简单记录下使用过程。 背景 目前的CreateTime、CreateUser、UpdateTime、UpdateUser等字段都是在插入和更新操作时手动设置, 每次都要手动操作太麻烦,可以把这几个操作放到一块包装一…

前端开发的主要语言有哪些?

1、HTML (HyperText Markup Language) 作用:HTML是构建网页内容的基础,是一种标记语言,用来定义网页的结构,如标题、段落、列表、表格、图像、链接等元素。优点:易于学习,广泛兼容,标准化程度高…

【MATLAB源码-第27期】基于matlab的QPSK定时同步仿真,采用gardner算法,Costa锁相环。

操作环境: MATLAB 2022a 1、算法描述 QPSK,有时也称作四位元PSK、四相位PSK、4-PSK,在坐标图上看是圆上四个对称的点。通过四个相位,QPSK可以编码2位元符号。图中采用格雷码来达到最小位元错误率(BER) —…

双目测距项目 | 在Jetson-Nano平台上部署SGBM深度测距+YOLOv5目标检测算法

项目应用场景 面向在 Jetson Nano 平台上部署 SGBM 深度测距和基于 YOLOv5 的目标检测算法,实现双目测距的功能。 项目流程与效果: 项目细节 > 具体参见项目 README.md项目获取 https://download.csdn.net/download/weixin_42405819/89051043

【经验分享】Ubuntu下如何解决问题arm-linux-gcc:未找到命令

【经验分享】Ubuntu下如何解决问题arm-linux-gcc:未找到命令 前言问题分析解决方法 前言 在编译过程中发现一个问题,明明之前安装了gcc-4.6版本,版本信息都是正常显示的,刚安装上去的时候也是可以用的。但不知道什么原因突然不能…

Linux多进程通信(3)——详细说说共享内存原理及使用例程

1.共享内存原理及优缺点 共享内存的原理便是将相同的一片物理内存映射到进程A和进程B不同的逻辑地址空间,两个进程同时访问这块物理内存(共享内存)。 1)优点 共享内存是进程间通信访问速度最快。 例如消息队列,FIFO&…

【MATLAB源码-第21期】基于matlab的BCH码编码译码仿真,调制使用QPSK,对比编码与未编码的误码率曲线。

操作环境: MATLAB 2022a 1、算法描述 QPSK调制解调:QPSK(Quadrature Phase Shift Keying)调制解调**是一种数字调制技术,通常用于数字通信系统。 调制: 1. 首先,将数字信号分成两路&#xff…

Django创建多app应用

目录 1. 引言 2. 多app创建的两种方式 2.1 多个app结构 2.2 单个apps多个app 3. 最后 1. 引言 在平常业务开发中,我们遇到的功能可能会有很多,单个app的应用可能无法满足我们 这个时候,我们就需要多app应用,例如&#xff1a…

22-应用构建三剑客:Pflag、Viper、Cobra核心功能介绍

如何构建应用框架 想知道如何构建应用框架,首先你要明白,一个应用框架包含哪些部分。在我看来,一个应用框架需要包含以下3个部分: 命令行参数解析:主要用来解析命令行参数,这些命令行参数可以影响命令的运…

【Servlet基础】Servlet项目创建

目录 一、认识Servlet 1.1、认识Tomcat 1.2、Servlet是什么 1.3、Servlet主要工作 二、实现第一个Servlet项目 2.1、创建Maven项目 2.2、引入依赖 2.3、创建目录结构 2.4、编写servlet代码 2.5、打包 2.6、部署 2.7、验证程序 三、利用smart Tomcat插件一键完…

【Frida】【Android】08_爬虫之网络通信库okhttp3

🛫 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…

【数据结构】AVL 树

文章目录 1. AVL 树的概念2. AVL 树节点的定义3. AVL 树的插入4. AVL 树的旋转5. AVL 树的验证6. AVL 树的删除7. AVL 树的性能 前面对 map / multimap / set / multiset 进行了简单的介绍【C】map & set,在其文档介绍中发现,这几个容器有个共同点是…

152 Linux C++ 通讯架构实战7 ,makefile编写改成for cpp,读配置文件,内存泄漏查找,设置标题实战

读写配置文件代码实战。nginx.conf 一个项目要启动,需要配置很多信息,第一项就是学习如何配置一个项目 nginx.conf的内容 #是注释行, #每个有效配置项用 等号 处理,等号前不超过40个字符,等号后不超过400个字符&#…