Pandas系列学习教程——17 pandas对每个分组应用apply函数

系列文章目录

第一章 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天数据

  1. 分组:使用groupby方法对数据集进行分组。
  2. 排序和选择Top N:定义一个函数,该函数对每个分组进行排序并返回前N个记录。topn: 表示要返回每个月份中最高温度的前几个数据。
  3. 应用:使用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函数,详细请看上文。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值