• 3个Pandas高频使用函数


    转载:https://mp.weixin.qq.com/s/6FECFHIkyItYnmQ37Vn_SQ

    大家好,我是Peter~

    本文主要是给大家介绍3个Pandas日常高频使用函数:apply + agg + transform。

    图片

    模拟数据

    模拟了一份简单的数据

    In [1]:

    import pandas as pd
    import numpy as np

    In [2]:

    df = pd.DataFrame(
        {"name":["xiaoming","sunjun","jimmy","tom"],
        "sex":["male","female","female","male"],
        "chinese":[100,80,90,92],
        "math":[90,100,88,90]
        })

    df

    Out[2]:

     namesexchinesemath
    0 xiaoming male 100 90
    1 sunjun female 80 100
    2 jimmy female 90 88
    3 tom male 92 90

    函数apply

    一个非常灵活的函数,能够对整个DataFrame或者Series执行给定函数的操作。

    函数可以是自定义的,也可以是python或者pandas内置的函数,还可以是匿名函数。

    使用1:自带函数

    改变字段类型:从int64变成float64

    In [3]:

    df.dtypes  # 改变前

    Out[3]:

    name       object
    sex        object
    chinese     int64
    math        int64
    dtype: object

    In [4]:

    df["chinese"] = df["chinese"].apply(float)

    In [5]:

    df.dtypes  # 改变后

    Out[5]:

    name        object
    sex         object
    chinese    float64
    math         int64
    dtype: object

    使用2:自定义函数

    In [6]:

    def change_sex(x):  # male-0  female-1
        return 0 if x == "male" else 1

    In [7]:

    df["sex"] = df["sex"].apply(change_sex)

    df  # 改变后

    图片

    使用3:匿名函数lambda

    In [8]:

    # float--->int

    df["chinese"] = df["chinese"].apply(lambda x: int(x))

    df.dtypes  

    Out[8]:

    name       object
    sex         int64
    chinese     int64
    math        int64
    dtype: object

    In [9]:

    # 将name变成首字母大写

    df["name"] = df["name"].apply(lambda x: x.title())

    df

    图片

    # 同时操作两列,记得axis=1

    df["score"] = df.apply(lambda x: x["chinese"] + x["math"], axis=1)
    df

    图片

    函数agg

    操作Series数据

    In [11]:

    # 1

    df["chinese"].agg(["mean", "sum"])

    Out[11]:

    mean     90.5
    sum     362.0
    Name: chinese, dtype: float64

    操作DataFrame数据

    In [12]:

    # 2

    df[["chinese","math"]].agg({"chinese":["sum"], "math":["mean"]})

    Out[12]:

     chinesemath
    sum 362.0 NaN
    mean NaN 92.0

    In [13]:

    # 3

    df[["chinese","math"]].agg({"chinese":["sum","mean"], "math":["mean"]})

    Out[13]:

     chinesemath
    sum 362.0 NaN
    mean 90.5 92.0

    groupby + agg的联合使用:

    In [14]:

    # 4

    df.groupby("sex").agg(["mean","sum"])

    图片

    # 5
    df.groupby("sex").agg({"chinese":["mean"], "math":["sum","min","max"]})

    图片

    还可以自定义新生成的字段名称:

    df.groupby("sex").agg(chinese_mean=("chinese","mean"), math_min=("chinese","min"))

    图片

    函数transform

    现在的df是这样子:

    图片

    假设有一个需求:统计性别男女 sex 的chinese 的平均分(新增一个字段放在最后面),如何实现?

    方法1:使用groupby + merge

    In [18]:

    # 1、先groupby

    df1 = df.groupby("sex")["chinese"].mean().reset_index()
    df1.columns = ["sex", "average"]
    df1

    图片

    # 2、merge

    # 结果
    df = pd.merge(df, df1, on="sex")
    df

    图片

    方法2:groupby + map

    In [20]:

    dic = df.groupby("sex")["chinese"].mean().to_dict()
    dic

    Out[20]:

    {0: 96.0, 1: 85.0}

    In [21]:

    df["average_map"] = df["sex"].map(dic)
    df

    图片

    方法3:使用transform

    使用transform可以一步到位

    df["average_tran"] = df.groupby("sex")["chinese"].transform("mean")
    df

    图片

    你学会了吗?欢迎加入星球,一起学习数据分析、pandas

  • 相关阅读:
    .NET 几种数据绑定控件的区别
    .NET 使用 Highcharts生成扇形图 柱形图
    使用Jquery1.9 版本 来实现全选
    30款jQuery常用网页焦点图banner图片切换
    MVC中使用MVCPager简单分页
    HttpWebRequest 以及WebRequest的使用
    C#中的事件机制
    如何向妻子解释OOD (转)
    linux 设置时间
    git 使用操作
  • 原文地址:https://www.cnblogs.com/testzcy/p/16629826.html
Copyright © 2020-2023  润新知