首页 > 其他分享 >3个Pandas高频使用函数

3个Pandas高频使用函数

时间:2022-08-27 09:22:06浏览次数:45  
标签:函数 chinese df sex agg groupby 高频 Pandas mean

转载: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

标签:函数,chinese,df,sex,agg,groupby,高频,Pandas,mean
From: https://www.cnblogs.com/testzcy/p/16629826.html

相关文章

  • R语言中apply函数的用法
     001、dat<-data.frame(a=c(3,8,2,1),b=c(8,4,2,6),c=c(2,7,6,9))##测试数据狂datapp......
  • R语言中colSums和rowSums函数
     用于计算数据中行的和及列的和。001、dat<-data.frame(a=c(3,8,2,1),b=c(8,4,2,6),c=c(2,7,6,9))......
  • php:定义“关联数组”的显示函数
    php:定义“关联数组”的显示函数    一、关联数组的显示函数代码部分 1<?php234/*函数定义区域*/56//定义“关联数......
  • 洛谷 P2582 函数
    函数-洛谷可以发现性质\(g(f^m(x))=f^m(g(x))\)。若设左侧\(x\)所在环大小为\(size(x)\),右侧\(g(x)\)所在环的大小为\(size(gx)\)。可以得到,\(size(gx)\mid......
  • C语言字符串处理函数 gets()和fgets()的区别及使用
    字符串函数(Stringprocessingfunction)也叫字符串处理函数,指的是编程语言中用来进行字符串处理的函数。本文主要介绍C语言中符串处理函数gets()和fgets()的区别使用方法,......
  • 【pytest】Hook钩子函数完整API总结
    pytest的钩子函数有很多,通过钩子函数的学习可以了解到pytest在执行用例的每个阶段做什么事情,也方便后续对pytest二次开发学习。详细文档可以查看pytest官方文档https://d......
  • C++ 内联函数
    1.函数的作用:避免重复制造轮子。(避免重复多次写相同的代码)2.函数的缺点:每调用一次函数,就会为这个函数分配一个“栈”,在计算机底层做很多准备工作(保护原来的执行环境,切换......
  • python基础-函数的进阶
    python基础-函数的进阶 一.函数参数--动态传参之前我们说过了传参,如果我们需要给一个函数传参, 而参数又是不确定的.或者我给一个函数传很多参数,我的形参就......
  • python基础-函数
    python基础-函数 一.什么是函数1.我们到目前为止,已经可以完成一些软件的基础功能了.那么我们来完成这样一个功能:约会:  ok.soeasy.我们已经完成了对......
  • container of()函数简介
       在linux内核编程中,会经常见到一个宏函数container_of(ptr,type,member),但是当你通过追踪源码时,像我们这样的一般人就会绝望了(这一堆都是什么呀?函数还可以这......