>>>def cal_result(df, x, y):
df['C'] = (df['A'] + df['B']) * x
df['D'] = (df['A'] + df['B']) * y
return df
>>>df.apply(cal_result, x=3, y=8, axis=1) # 第一种方式
A B C D
0 0.109197 0.510993 1.860572 4.961525
1 0.888893 0.561702 4.351787 11.604764
>>>df.apply(cal_result, args=(3, 8), axis=1) # 第二种方式
A B C D
0 0.109197 0.510993 1.860572 4.961525
1 0.888893 0.561702 4.351787 11.604764
>>>df.apply(cal_result, **{'x': 3, 'y': 8}, axis=1) # 第三种方式
A B C D
0 0.109197 0.510993 1.860572 4.961525
1 0.888893 0.561702 4.351787 11.604764
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>>
def
cal_result
(
df
,
x
,
y
)
:
df
[
'C'
]
=
(
df
[
'A'
]
+
df
[
'B'
]
)
*
x
df
[
'D'
]
=
(
df
[
'A'
]
+
df
[
'B'
]
)
*
y
return
df
>>>
df
.
apply
(
cal_result
,
x
=
3
,
y
=
8
,
axis
=
1
)
# 第一种方式
A
B
C
D
0
0.109197
0.510993
1.860572
4.961525
1
0.888893
0.561702
4.351787
11.604764
>>>
df
.
apply
(
cal_result
,
args
=
(
3
,
8
)
,
axis
=
1
)
# 第二种方式
A
B
C
D
0
0.109197
0.510993
1.860572
4.961525
1
0.888893
0.561702
4.351787
11.604764
>>>
df
.
apply
(
cal_result
,
*
*
{
'x'
:
3
,
'y'
:
8
}
,
axis
=
1
)
# 第三种方式
A
B
C
D
0
0.109197
0.510993
1.860572
4.961525
1
0.888893
0.561702
4.351787
11.604764
y
倍添加到
C
,
D
列中。这里有三种方式可以完成参数的赋值,第一种方式直接通过关键字参数赋值,指定参数的值;第二种方式是使用
args
关键字参数传入一个包含参数的元组;第三种方式传入通过
*
*
传入包含参数和值的字典。
apply的使用是很灵活的,再举一个例子,配合
loc
方法我们能够在最后一行得到一个总和:
需要注意的是这里必须使用
df
[
[
'A'
]
]
,表示这是一个DataFrame,而不是一个Series,如果使用
df
[
'A'
]
就会报错。同样从行取元素也要将它先转成DataFrame。还需要注意apply方法和applymap的区别:
apply方法操作的是行或列的运算,而不是元素的运算,比如在这里使用格式化操作就会报错;
applymap方法操作的是元素,因此没有诸如axis这样的参数,它只接受函数传入。
map()方法
如果你对applymap方法搞清楚了,那么map方法就很简单,说白了map方法是应用在Series中的,还是举上面的例子: