1.方法的参数解释
官方解释:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html
DataFrame.apply(self, func, axis=0, broadcast=None, raw=False, reduce=None, result_type=None, args=(), **kwds)[source]
对DataFrame的行或列应用一个方法
传递给该函数的对象是Series对象,对象的索引是DataFrame的索引(axis = 0)或DataFrame的列(axis = 1)。返回类型:默认情况下(result_type = None),则最终的返回类型是根据提供的方法的返回类型来推断的;否则,它取决于result_type参数。
参数:
func : 方法名称;需要应用在每行或每列的方法名
axis : 行或列
有两种值:
整数:0或1,其中0表示列,1表示行;
字符串:‘index’或‘columns’,其中‘index’表示列;‘columns’表示行
broadcast : 布尔型, 可选
仅与聚合函数有关:
如果为False或者None:表示返回一个Series,其长度为index的长度或列数(基于axis参数)
如果为True : :结果将会被保存到原始数据中,原始的行列会被保留
从0.23.0版开始不推荐使用:此参数将在以后的版本中删除,由result_type =“ broadcast”代替。
raw : 布尔型, 默认为:False
如果为False : 将每个行或列作为一个Series传递给函数。
如果True : 传递的函数将接收一个ndarray对象。如果您仅使用一个NumPy聚合方法,它的性能会非常好。
reduce : 布尔型 或者 None, 默认为: None
使用聚合方法。如果DataFrame为空,则apply方法将根据reduce来确定结果应为Series还是DataFrame。
如果reduce = None(默认值),将通过在空的Series上调用func来判断apply的返回值(注意:在判断 时,func引发的异常将被忽略);
如果reduce = True,apply方法将始终返回一个Series,
如果reduce = False,则将始终返回一个DataFrame。
从版本0.23.0开始不推荐使用:在以后的版本中将删除此参数,并替换为result_type ='reduce'。
result_type : 返回值的类型{‘expand’, ‘reduce’, ‘broadcast’, None}, 默认 None
仅在axis = 1(columns)时起作用::
‘expand’ : 类似与列表这类结果就会被转换成columns.
‘reduce’ : 返回一个Series。这与“expand”相反。
‘broadcast’ :结果将会被保存到原始数据中,原始的行列会被保留
None :依赖与调用方法的返回值
New in version 0.23.0.
args : 元组类型,tuple
需要递给func的除array/series外的其他参数。
**kwds
传递给func的其他关键字参数。
返回值:
Series 或者 DataFrame
Result of applying func along the given axis of the DataFrame.
2.例子
# -*- coding:utf-8 -*-
import pandas as pd
data = {'card':['11111','11112','11113','11114'],
'ship':['22221','22222','22223','22224'],
'sold':['32221','32222','32223','32225']}
data = pd.DataFrame(data)
df = {'id':['1','2','3','4'],
'ship':['22221','22222','22225','22224'],
'sold':['32221','32222','32226','32224']}
df = pd.DataFrame(df)
result_dic = df.set_index("ship").to_dict()['sold']
def mapping_check(df,result_dic):
if df['ship'] in result_dic.keys() :
if df['sold'] == result_dic[df['ship']]:
return "correct"
else:
return "sold_error"
else:
return "ship_error"
data['result'] = data.apply(mapping_check,result_dic=result_dic,axis=1)
print(data)
打印结果为:
card ship sold result
0 11111 22221 32221 correct
1 11112 22222 32222 correct
2 11113 22223 32223 ship_error
3 11114 22224 32225 sold_error