前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >3个Pandas高频使用函数

3个Pandas高频使用函数

作者头像
lyhue1991
发布2023-02-23 12:07:22
发布2023-02-23 12:07:22
60800
代码可运行
举报
运行总次数:0
代码可运行

公众号:尤而小屋 作者:Peter 编辑:Peter

大家好,我是Peter~

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

模拟数据

模拟了一份简单的数据

In [1]:

代码语言:javascript
代码运行次数:0
运行
复制
import pandas as pd
import numpy as np

In [2]:

代码语言:javascript
代码运行次数:0
运行
复制
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]:

name

sex

chinese

math

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]:

代码语言:javascript
代码运行次数:0
运行
复制
df.dtypes  # 改变前

Out[3]:

代码语言:javascript
代码运行次数:0
运行
复制
name       object
sex        object
chinese     int64
math        int64
dtype: object

In [4]:

代码语言:javascript
代码运行次数:0
运行
复制
df["chinese"] = df["chinese"].apply(float)

In [5]:

代码语言:javascript
代码运行次数:0
运行
复制
df.dtypes  # 改变后

Out[5]:

代码语言:javascript
代码运行次数:0
运行
复制
name        object
sex         object
chinese    float64
math         int64
dtype: object

使用2:自定义函数

In [6]:

代码语言:javascript
代码运行次数:0
运行
复制
def change_sex(x):  # male-0  female-1
    return 0 if x == "male" else 1

In [7]:

代码语言:javascript
代码运行次数:0
运行
复制
df["sex"] = df["sex"].apply(change_sex)

df  # 改变后

使用3:匿名函数lambda

In [8]:

代码语言:javascript
代码运行次数:0
运行
复制
# float--->int

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

df.dtypes  

Out[8]:

代码语言:javascript
代码运行次数:0
运行
复制
name       object
sex         int64
chinese     int64
math        int64
dtype: object

In [9]:

代码语言:javascript
代码运行次数:0
运行
复制
# 将name变成首字母大写

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

df
代码语言:javascript
代码运行次数:0
运行
复制
# 同时操作两列,记得axis=1

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

函数agg

操作Series数据

In [11]:

代码语言:javascript
代码运行次数:0
运行
复制
# 1

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

Out[11]:

代码语言:javascript
代码运行次数:0
运行
复制
mean     90.5
sum     362.0
Name: chinese, dtype: float64

操作DataFrame数据

In [12]:

代码语言:javascript
代码运行次数:0
运行
复制
# 2

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

Out[12]:

chinese

math

sum

362.0

NaN

mean

NaN

92.0

In [13]:

代码语言:javascript
代码运行次数:0
运行
复制
# 3

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

Out[13]:

chinese

math

sum

362.0

NaN

mean

90.5

92.0

groupby + agg的联合使用:

In [14]:

代码语言:javascript
代码运行次数:0
运行
复制
# 4

df.groupby("sex").agg(["mean","sum"])
代码语言:javascript
代码运行次数:0
运行
复制
# 5
df.groupby("sex").agg({"chinese":["mean"], "math":["sum","min","max"]})

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

代码语言:javascript
代码运行次数:0
运行
复制
df.groupby("sex").agg(chinese_mean=("chinese","mean"), math_min=("chinese","min"))

函数transform

现在的df是这样子:

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

方法1:使用groupby + merge

In [18]:

代码语言:javascript
代码运行次数:0
运行
复制
# 1、先groupby

df1 = df.groupby("sex")["chinese"].mean().reset_index()
df1.columns = ["sex", "average"]
df1
代码语言:javascript
代码运行次数:0
运行
复制
# 2、merge

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

方法2:groupby + map

In [20]:

代码语言:javascript
代码运行次数:0
运行
复制
dic = df.groupby("sex")["chinese"].mean().to_dict()
dic

Out[20]:

代码语言:javascript
代码运行次数:0
运行
复制
{0: 96.0, 1: 85.0}

In [21]:

代码语言:javascript
代码运行次数:0
运行
复制
df["average_map"] = df["sex"].map(dic)
df

方法3:使用transform

使用transform可以一步到位

代码语言:javascript
代码运行次数:0
运行
复制
df["average_tran"] = df.groupby("sex")["chinese"].transform("mean")
df

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


尤而小屋,一个温馨的小屋。小屋主人,一手代码谋求生存,一手掌勺享受生活,欢迎你的光临

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法美食屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 模拟数据
  • 函数apply
    • 使用1:自带函数
    • 使用2:自定义函数
    • 使用3:匿名函数lambda
  • 函数agg
    • 操作Series数据
    • 操作DataFrame数据
  • 函数transform
    • 方法1:使用groupby + merge
    • 方法2:groupby + map
    • 方法3:使用transform
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档