pandas使用教程:apply函数、聚合函数agg和transform
文章目录
- apply函数调用
- apply函数描述性统计
- apply函数lambda自定义
- 聚合函数aggregate/agg
- 用字典实现聚合
- transform函数
- 多函数 Transform
- 重置索引与更换标签
- 行重置索引
- 行和列同时重置索引
apply函数调用
apply函数描述性统计
import numpy as np
df.loc[:,'Q1':'Q4'].apply(np.mean)
df.loc[:,'Q1':'Q4'].apply('mean') #两种写法均可
Q1 49.20
Q2 52.55
Q3 52.67
Q4 52.78
dtype: float64
df.loc[:,'Q1':'Q4'].apply(np.cumsum) #累加函数
apply函数lambda自定义
#每季度最值之差
df.loc[:,'Q1':'Q4'].apply(lambda x: x.max() - x.min())
Q1 97
Q2 98
Q3 98
Q4 97
dtype: int64
#最大值对应索引
df.loc[:,'Q1':'Q4'].apply(lambda x: x.idxmax())
Q1 Lincoln4
Q2 Harley
Q3 Lfie
Q4 Ronnie
dtype: object
聚合函数aggregate/agg
#计算每列总和 平均数
df.iloc[:,1:].agg(['sum','mean'])
#使用匿名函数lambda
df.iloc[:,1:].agg(['sum',lambda x:x.mean()])
#自定义函数 三种方法
def avg(x):
return x.mean()
df.iloc[:,1:].agg(['sum',avg])
Q1 Q2 Q3 Q4
sum 4920.0 5255.00 5267.00 5278.00
mean 49.2 52.55 52.67 52.78
用字典实现聚合
指定为哪些列应用哪些聚合函数时,需要把包含列名与标量(或标量列表)的字典传递给 DataFrame.agg
。
df.iloc[:,1:].agg({'Q1': 'mean', 'Q2': 'sum'})
Q1 49.2
Q2 5255.0
dtype: float64
df.iloc[:,1:].agg({'Q1':['mean','max'],'Q2':'sum'})
Q1 Q2
max 98.0 NaN
mean 49.2 NaN
sum NaN 5255.0
transform函数
transform
方法的返回结果与原始数据的索引相同,大小相同。与 .agg
API 类似,该 API 支持同时处理多种操作,不用一个一个操作。
#将Q1列全部转换为整数
df['Q1'].transform(np.round)
name
Liver 89
Arry 36
Ack 57
Eorge 93
Oah 65
..
Gabriel 48
Austin7 21
Lincoln4 98
Eli 11
Ben 21
Name: Q1, Length: 100, dtype: int64
多函数 Transform
transform()
调用多个函数时,生成多层索引 DataFrame。第一层是原始数据集的列名;第二层是 transform()
调用的函数名。
#transform调用两个函数
df['Q1'].transform([np.round,lambda x:x+1])
round_ <lambda>
name
Liver 89 90
Arry 36 37
Ack 57 58
Eorge 93 94
Oah 65 66
... ... ...
Gabriel 48 49
Austin7 21 22
Lincoln4 98 99
Eli 11 12
Ben 21 22
重置索引与更换标签
#生成一个4x4的dataframe
s = pd.DataFrame(np.random.randint(0,100,(4,4)),index=['a','b','c','d'],columns=['s','w','x','r'])
s w x r
a 6 28 84 27
b 1 56 92 66
c 46 46 3 91
d 4 81 1 51
行重置索引
s.reindex(['d','c','b','a'])
s w x r
d 4 81 1 51
c 46 46 3 91
b 1 56 92 66
a 6 28 84 27
行和列同时重置索引
s.reindex(index=['d','c','b','a'],columns=['r','x','w','s'])
r x w s
d 51 1 81 4
c 91 3 46 46
b 66 92 56 1
a 27 84 28 6