pandas实用技巧1:基于dataframe的多变量/多字段操作

1.前言

    很多刚接触pandas的不太清楚,怎么进行类似于sql的多字段求和、或者类似于sas的多字段处理,下面举几个例子讲讲pandas如何进行多变量/多字段操作:

2.数据准备

    首先,造一点数据用于举例:

    代码:

    import pandas as pd

    df = pd.DataFrame([["a1",2,3],["a2",5,6],["b1",5,6]])

    df.columns = ["a","b","c"]

3.一个简单的多字段求和例子

    现在对b、c字段求和,生成d变量:

    代码:

    df['d'] = df[["a","b"]].apply(lambda x : sum(x) ,axis = 1)

4.例子原理解析

    4.1 例子用到的apply函数

        apply函数是用在dataframe的,而map函数是用在series的,基本上用多了pandas就会用到这两个函数,主要是给多列或多行做批量处理用的,功能非常强大,基本可以实现sas、sql的所有功能,也可以自定义批量处理函数,后续会专门陆续补充这两个函数的介绍内容。

    4.2 axis参数的影响

        对于刚刚接触pandas搞数据的小伙伴,这个参数可能有点让人难以理解,对于一般使用来说,只需要理解,当axis = 1的时候,x传进来的就是一行数据,是一个列表,列表里的每个元素代表某列的该行的值;当axis = 0 的时候, x传进来的就是一列数据。

5.举一反三的应用

    5.1 直接在lambda表达式构造处理流程

        下面实现了一个功能:当a列包含字符“a”的时候,返回b和c的求和结果,否则返回0,结果保存在d列

        df['d'] = df[["a","b"]].apply(lambda x : x[1] + x[2] if x[0].find("a") != -1 else 0,axis = 1)

    5.1 自定义多列处理的函数

        下面定义了一个多列处理函数,对于每一行求和,在原来的基础上加上了一个判断,即每一行的元素值要大于某个值的时候,才求和,否则跳过。

        def sumif(x,value):

            mark = 0

            for i in x:

                if i > value:

                    mark = mark + i

        return mark

        df['d'] = df[["a","b"]].apply(lambda x : sumif(x,2) ,axis = 1)

5.小结

    其实本身dataframe里也封装了很多典型的方法用于多字段操作(主要是筛选记录),但是做数据的需求太复杂,有时候需要自定义的定制化函数来处理,本文介绍了pandas的多变量/多字段操作,通过一个小例子来介绍了pandas进行多列操作的原理,目的是提供一个更灵活的解决方案。

你可能感兴趣的:(pandas实用技巧1:基于dataframe的多变量/多字段操作)