系列文章目录
第一章 Pandas 学习入门之pandas数据读取
第二章 Pandas 学习入门之pandas数据结构
第三章 Pandas 学习入门之pandas数据查询
第四章 Pandas 学习入门之pandas新增数据列
第五章 Pandas 学习入门之pandas数据统计函数
第六章 Pandas 学习入门之pandas处理缺失值
第七章 Pandas 学习入门之pandas数据排序
第八章 Pandas 学习入门之pandas字符串操作
第九章 Pandas 学习入门之pandas重要参数axis
第十章 Pandas 学习入门之pandas索引index用途
第十一章 Pandas 学习入门之pandas实现DataFrame的Merge
第十二章 Pandas 学习入门之pandas实现数据合并Concat
第十三章 Pandas 学习入门之pandas批量拆分Excel与合并Excel
第十四章 Pandas 学习入门之pandas分组聚合统计groupby
第十五章 Pandas 学习入门之pandas分层索引MultiIndex
第十六章 Pandas 学习入门之pandas数据转换函数map、apply、applymap
第十七章 Pandas 学习入门之pandas对每个分组应用apply函数
随着人工智能的不断发展,数据分析这门技术也越来越重要,很多人都开启了学习数据分析,本文就介绍了pandas学习的基础内容。本章简单介绍了pandas对每个分组应用apply函数
,详细请看下文。
前言
本章简单介绍了pandas对每个分组应用apply函数
,详细请看下文。
提示:以下是本篇文章正文内容,下面案例可供参考
一、pandas对每个分组应用apply函数
知识:Pandas的GroupBy遵从split、apply、combine模式
这里的split指的是pandas的groupby,我们自己实现apply函数,apply返回的结果由pandas进行combine得到结果。
GroupBy.apply(function)
- function的第一个参数是dataframe
- function的返回结果,可是dataframe、series、单个值,甚至和输入dataframe完全没关系
二、实例一:怎样对数值列按分组的归一化?
1.知识点讲解
将不同范围的数值列进行归一化,映射到[0,1]区间:
- 更容易做数据横向对比,比如价格字段是几百到几千,增幅字段是0到100
- 机器学习模型学的更快性能更好
2.归一化公式
3.演示:用户对电影评分的归一化
每个用户的评分不同,有的乐观派评分高,有的悲观派评分低,按用户做归一化
import pandas as pd
ratings = pd.read_csv("./ratings.csv")
ratings
# 实现按照用户ID分组,然后对其中一列归一化
def ratings_norm(df):
"""
@param df:每个用户分组的dataframe
"""
min_value = df["Rating"].min()
max_value = df["Rating"].max()
df["Rating_norm"] = df["Rating"].apply(
lambda x: (x-min_value)/(max_value-min_value))
return df
ratings = ratings.groupby("UserID").apply(ratings_norm)
ratings[ratings["UserID"]==1].head()
可以看到UserID==1这个用户,Rating==3是他的最低分,是个乐观派,我们归一化到0分。
三、实例二:怎样取每个分组的TOPN数据?
获取2018年每个月温度最高的2天数据
- 分组:使用
groupby
方法对数据集进行分组。 - 排序和选择Top N:定义一个函数,该函数对每个分组进行排序并返回前N个记录。
topn
: 表示要返回每个月份中最高温度的前几个数据。 - 应用:使用
apply
方法将上述函数应用到每个分组上。
fpath = "./beijing_tianqi_2018.csv"
df = pd.read_csv(fpath)
# 替换掉温度的后缀℃
df.loc[:, "bWendu"] = df["bWendu"].str.replace("℃", "").astype('int32')
df.loc[:, "yWendu"] = df["yWendu"].str.replace("℃", "").astype('int32')
# 新增一列为月份
df['month'] = df['ymd'].str[:6]
df
def getWenduTopN(df, topn):
"""
这里的df,是每个月份分组group的df
"""
return df.sort_values(by="bWendu")[["ymd", "bWendu"]][-topn:]
df.groupby("month").apply(getWenduTopN, topn=1)
该代码的作用是返回每个月份中最高温度最高的一行数据。
我们看到,grouby的apply函数返回的dataframe,其实和原来的dataframe其实可以完全不一样。
总结
提示:这里对文章进行总结:
随着人工智能的不断发展,数据分析这门技术也越来越重要,很多人都开启了学习数据分析,本文就介绍了pandas学习的基础内容。本章简单介绍了pandas对每个分组应用apply函数
,详细请看上文。