pandas的apply方法基础使用

pandas中利用apply来对数据进行处理十分常见,也十分的方便,原因在于apply方法可以调用函数:

        应用于dataframe的各个列


这里借用了一位老师的图:(充分说明了group到apply的过程)

In [45]: df = pd.DataFrame({'a':[1,2,1,2],'b':[3,4,5,6]})

In [46]: df
Out[46]:
   a  b
0  1  3
1  2  4
2  1  5
3  2  6

group可以直接使用默认函数方法,也可以和apply的结合使用:

In [49]: df.groupby('a').sum()
Out[49]:
    b
a
1   8
2  10
In [52]: df.groupby('a').apply(sum)
Out[52]:
   a   b
a
1  2   8
2  4  10

当然也可以使用我们自己编写的函数:

def reduce(dx):
	dx.sum()		#在apply中函数不需要加(),但是在其他地方调用函数需要加上(),不要搞混了
	return dx

In [60]: df.groupby('a').apply(reduce)
Out[60]:
   a   b
a
1  2   8
2  4  10

当调用函数,且需要加入其它参数时:

def reduce(dx,k):
	dx = dx*k
	return dx
In [73]: df.apply(reduce,axis=1,args=(2,))
Out[73]:
   a   b
0  2   6
1  4   8
2  2  10
3  4  12

多个参数:

def reduce(dx,k,kk):
	dx = dx*k+kk
	return dx
In [75]: df.apply(reduce,axis=1,args=(2,1,))
Out[75]:
   a   b
0  3   7
1  5   9
2  3  11
3  5  13

应用函数添加某列时:

def reduce(dx,k):
	dx['c'] = dx['a']*k + dx['b']
	return dx
In [77]: df.apply(reduce,axis=1,args=(2,))
Out[77]:
   a  b   c
0  1  3   5
1  2  4   8
2  1  5   7
3  2  6  10


一个小练习:

In [32]: data
Out[32]:
     Pclass  Survived
0         3         0
1         3         0
2         2         0
3         3         0
4         3         0
5         3         0
6         3         0
7         2         0
8         3         0
9         3         0
10        3         0
11        1         0
12        1         0
13        2         0
14        1         0
15        2         0
16        2         0

这里我们有两列数据,完成通过Pclass的值,修改Survived为对应值(可以自行添加参数)


def reduce(dx):
	if dx['Pclass'] == 1:
		dx['Survived'] = 1
	elif dx['Pclass'] == 2:
		dx['Survived'] =2
	elif dx['Pclass'] == 3:
		dx['Survived'] = 3
	else:
		dx['Survived'] = 0
	return dx

首先编写一个函数,再使用apply来调用

In [34]: data.apply(reduce,axis=1)
Out[34]:
     Pclass  Survived
0         3         3
1         3         3
2         2         2
3         3         3
4         3         3
5         3         3
6         3         3
7         2         2
8         3         3
9         3         3
10        3         3
11        1         1
12        1         1
13        2         2
14        1         1
15        2         2
16        2         2


  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值