03_Pandas基本操作-位置计算

diff()和shift()经常用来计算数据的增量变化,rank()用来生成数据的整体排名

位置差值 diff()

df.diff() 可以做位移差操作,经常用来计算一个序列数据中上一个数据和下一个数据之间的差值,如增量研究。默认被减的数列下一位,原位置在同位置上对移动后的数据相减。得到一个新的序列,第一位由于被减数下移,没有数据(结果为NaN)。可以传入一个数值来设定需要移动多少位。

DataFrame会对所有数字列移动计算,同时不允许有非数字类型列。

pd.Series([9,4,6,7,9]).diff()
# 0    NaN
# 1   -5.0
# 2    2.0
# 3    1.0
# 4    2.0
# dtype: float64
pd.Series([9,4,6,7,9]).diff(-2) # 后方向,移动两位求差值
# 0    3.0
# 1   -3.0
# 2   -3.0
# 3    NaN
# 4    NaN
# dtype: float64

对于DataFrame,可以传入axis=1,进行左右移动

df.loc[:,['total_bill','tip']].head().diff(axis=1)
# 	   total_bill	tip
#   sex		
# Female	NaN 	-15.98
# Male	    NaN 	-8.68
# Male	    NaN 	-17.51
# Male	    NaN 	-20.37
# Female	NaN 	-20.98

## 移动位置

shift()可以对数据进行位移,不做任何计算,也支持上下左右移动,移动后的目标位置的类型无法接收的为NaN

# 整体下移一行,最顶的一行为NaN
df.shift()
df.shift(3) # 移三行
df.Q1.head().shift(-1) # Q1列取前5,再上移一行
# 向右移动一位
df.shift(axis=1)
df.shift(3,axis=1) # 动三位
df.shift(-1,axis=1) # 向左移动一位
# 实现了df.Q1.diff()
df.Q1-df.Q1.shift()

位置序号rank()

rank()可以生成数据的排序值替换掉原来的数据值,支持所有数据类型排序

df.head().rank()
# 		total_bill	tip	smoker	day	time	size
# sex						
# Female	2.0	1.0	3.0	3.0	3.0	1.5
# Male		1.0	2.0	3.0	3.0	3.0	3.5
# Male		3.0	4.0	3.0	3.0	3.0	3.5
# Male		4.0	3.0	3.0	3.0	3.0	1.5
# Female	5.0	5.0	3.0	3.0	3.0	5.0

参数pct=True 可以将序数转换成0到1的数,从而知道数据所处的位置

df.head().rank(pct=True)
# 		total_bill	tip	smoker	day	time	size
# sex						
# Female	0.4	0.2	0.6	0.6	0.6	0.3
# Male		0.2	0.4	0.6	0.6	0.6	0.7
# Male		0.6	0.8	0.6	0.6	0.6	0.7
# Male		0.8	0.6	0.6	0.6	0.6	0.3
# Female	1.0	1.0	0.6	0.6	0.6	1.0

method参数,指定排序过程中遇到相同值得序号计算方法,取值有下面几个:

  • average:序号的平均值,如并列第1名,则按照二次元计算(1+2)/2,都显示1.5,下个数据的值是3
  • min:最小的序号,如并列第一名,则都显示1,下个数据为3
  • max:最大的序号,如并列第一名,则都显示1,下个数据为2
  • first:如并列第一名,按照索引的先后显示
  • dense:如并列第一名,都显示1,下个数据为2

如果遇到空值,可以传入na_option=‘bottom’,把空值放到最后,值为top放前面

上一篇:最大公共子序列c++-概念


下一篇:使用 el-upload 如何做到发送一次请求上传多个文件