3个Pandas高频使用函数
本文主要是介绍3个Pandas中很实用的函数:apply + agg + transform
模拟数据
In [1]:
1 | import pandas as pd |
In [2]:
1 | df = pd.DataFrame( |
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]:
1 | df.dtypes |
Out[3]:
1 | name object |
In [4]:
1 | df["chinese"] = df["chinese"].apply(float) |
In [5]:
1 | df.dtypes |
Out[5]:
1 | name object |
使用2:自定义函数
In [6]:
1 | def change_sex(x): # male-0 female-1 |
In [7]:
1 | df["sex"] = df["sex"].apply(change_sex) |
使用3:匿名函数lambda
In [8]:
1 | # float--->int |
Out[8]:
1 | name object |
In [9]:
1 | # 将name变成首字母大写 |
1 | # 同时操作两列,记得axis=1 |
函数agg
操作Series数据
In [11]:
1 | # 1 |
Out[11]:
1 | mean 90.5 |
操作DataFrame数据
In [12]:
1 | # 2 |
Out[12]:
chinese | math | |
---|---|---|
sum | 362.0 | NaN |
mean | NaN | 92.0 |
In [13]:
1 | # 3 |
Out[13]:
chinese | math | |
---|---|---|
sum | 362.0 | NaN |
mean | 90.5 | 92.0 |
groupby + agg的联合使用:
In [14]:
1 | # 4 |
1 | # 5 |
还可以自定义新生成的字段名称:
1 | df.groupby("sex").agg(chinese_mean=("chinese","mean"), math_min=("chinese","min")) |
函数transform
现在的df是这样子:
假设有一个需求:统计性别男女 sex 的chinese 的平均分(新增一个字段放在最后面),如何实现?
办法1:使用groupby + merge
In [18]:
1 | # 1、先groupby |
1 | # 2、merge |
方法2:groupby + map
In [20]:
1 | dic = df.groupby("sex")["chinese"].mean().to_dict() |
Out[20]:
1 | {0: 96.0, 1: 85.0} |
In [21]:
1 | df["average_map"] = df["sex"].map(dic) |
使用transform
可以一步到位
1 | df["average_tran"] = df.groupby("sex")["chinese"].transform("mean") |
你学会了吗?