python - 使用 Pandas 函数而不是 for 循环来查找列中的前三个项目
问题描述
我有一个熊猫数据框,其中一部分显示在这张图片中(https://i.stack.imgur.com/VKJ8G.png)。所以我需要找到每个州人口最多的 3 个县的人口总和(使用 2010 年人口普查),并找到总和最高的前 3 个州。我是 pandas 的新手,所以我使用循环和条件来完成任务这是我写的代码:
def answer_six():
top1=["nil",0]
top2=["nil",0]
top3=["nil",0]
for item in census_df['STNAME']:
s_sum=census_df[census_df['STNAME'] == item].nlargest(3, ['CENSUS2010POP'])['CENSUS2010POP'].sum()
if top1[1]==0:
top1=[item,s_sum]
if s_sum>top1[1]:
top3=top2
top2=top1
top1=[item,s_sum]
if s_sum<top1[1] and s_sum>top2[1]:
top3=top2
top2=[item,s_sum]
if s_sum<top2[1] and s_sum>top3[1]:
top3=[item,s_sum]
ans=[top1[0],top2[0],top3[0]]
return ans
运行此代码大约需要 15 秒才能得到答案。有没有更好的方法使用像 sum()、max() 等 pandas 数据框函数?
解决方案
取自Code Review 讨论,这将起作用:
census_df[census_df['SUMLEV'] == 50].groupby(
'STNAME')['CENSUS2010POP'].apply(
lambda x: x.nlargest(3).sum()).nlargest(
3).index.values.tolist()
推荐阅读
- html - twig/symfony - 多个 if 条件
- amazon-web-services - Cloudfront 默认域有效,但在备用域名上获得“NoSuchWebsiteConfiguration”
- javascript - 串联运行多个命令行
- amazon-s3 - S3 CORS 配置被公共访问设置取代?
- c# - 从 asp.net 核心控制台应用程序运行网站
- c# - 在模块化架构中制作数据访问层的正确方法?
- multithreading - Kotlin 协程不会立即编译(挂起函数?)
- c# - 每个对象都有相同的数组
- php - 正则表达式查找和替换印度字符
- mysql - 按每个房间的最近聊天对聊天室进行排序的最佳方法是什么