【Python】Pandas 的 apply 函数使用示例

applypandas 库的一个很重要的函数,多和 groupby 函数一起用,也可以直接用于 DataFrameSeries 对象。主要用于数据聚合运算,可以很方便的对分组进行现有的运算和自定义的运算。
在这里插入图片描述


数据集

使用的数据集是美国人口普查的数据,可以从这里下载,里面包含了CSV数据文件和PDF说明文件,说明文件里解释了每个变量的意义。

数据大致是这个样子:

美国人口普查数据
*美国人口普查数据*

问题

  1. 以每个州人口最多的 3 个县的人口总和为这个州人口的衡量标准,哪 3 个州人口最多?
  2. 在 2010 年至 2015 年间人口变化幅度最大的是哪个县?

分析

  1. 先按州分组,再对每个州内的县进行排序选出人口最多的 3 个县求和,作为每个州的人口数,最后排序。
  2. 对于每个县,计算 2010-2015 年的人口数的最大值和最小值,求出差值即变化幅度,再对差值进行排序找出变化幅度最大的县。

代码

问题1

census_df = pd.read_csv('census.csv')
only_county = census_df[census_df['SUMLEV'] == 50]


def top(df, n=3, column='CENSUS2010POP'):
    return df.sort_values(column, ascending=False)[:n]['CENSUS2010POP'].sum()


grouped = only_county[['STNAME', 'CTYNAME', 'CENSUS2010POP']].groupby('STNAME').apply(top)
grouped.sort_values(ascending=False)[:3].index.tolist()

输出:
在这里插入图片描述

问题2

census_df = pd.read_csv('census.csv')
only_county = census_df[census_df['SUMLEV'] == 50]


def get_change(row):
    pop_year = row[['POPESTIMATE2010', 
					'POPESTIMATE2011', 
					'POPESTIMATE2012', 
					'POPESTIMATE2013', 
					'POPESTIMATE2014', 
					'POPESTIMATE2015']]
    return pop_year.max() - pop_year.min()


only_county.loc[only_county.apply(get_change, axis=1).argmax()]['CTYNAME']

输出:

这里写图片描述


END

  • 20
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
pandasapply函数是一个非常有用的函数,它可以将一个自定义的函数应用到DataFrame或Series的每一行或每一个元素上。通过apply函数,我们可以对数据进行自定义的操作和转换。 apply函数的基本语法是:df.apply(func, axis=0/1) 其中,func是我们自定义的函数,可以是一个lambda表达式或者普通的函数。axis参数指定了应用函数的方向,axis=0表示按列应用函数,axis=1表示按行应用函数。 当我们使用apply函数时,它会遍历DataFrame或Series的每一行或每一个元素,并将其作为参数传递给我们定义的函数。然后,我们可以在函数中对数据进行处理、计算或其他操作,并返回处理后的结果。 下面是一个示例,展示了如何使用apply函数计算DataFrame中每一行的和: ```python import pandas as pd # 创建一个示例DataFrame data = {'A': [1, 2, 3], 'B': [4, 5, 6]} df = pd.DataFrame(data) # 定义一个函数,计算每一行的和 def row_sum(row): return row['A'] + row['B'] # 使用apply函数应用row_sum函数到每一行 df['Sum'] = df.apply(row_sum, axis=1) print(df) ``` 输出结果为: ``` A B Sum 0 1 4 5 1 2 5 7 2 3 6 9 ``` 这里,我们定义了一个函数row_sum,它接收一个参数row,表示DataFrame中的每一行。在函数中,我们通过row['A']和row['B']分别获取每一行的'A'列和'B'列的值,并将它们相加作为结果返回。然后,我们使用apply函数将row_sum函数应用到每一行,并将计算结果存储在新的'Sum'列中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

secsilm

来一根火腿?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值