pandas.DataFrame.apply方法详解

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

你可能感兴趣的:(python)