pandas使用教程:apply函数、聚合函数agg和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


阅读量:1167

点赞量:0

收藏量:0