首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在过滤数据帧中的多个列时提取前3个值(census.csv)

在过滤数据帧中的多个列时提取前3个值(census.csv)
EN

Stack Overflow用户
提问于 2019-04-25 15:29:03
回答 3查看 81关注 0票数 0

我正在使用pandas并尝试查询人口普查数据集。我想根据人口(从最大到最小)提取每个州的前3个城市。我正在粘贴数据集的简短快照以供参考

我想要的输出如下所示

我尝试使用that,但我面临的问题是STNAME和CTYNAME都是对象。我试过的公式如下:

代码语言:javascript
运行
复制
def abcd(df):
    return (df.nlargest(3,['STNAME','CTYNAME','CENSUS2010POP']))

另一种查询方法是,我尝试使用groupby方法:

代码语言:javascript
运行
复制
df.groupby('STNAME')['CTYNAME','CENSUS2010POP'].max()

但是这个公式给了我最大的per值,而不是3个最大值。有人能帮上忙吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-25 16:35:47

尝试:

df.groupby('STNAME').apply(lambda grp: grp.nlargest(3,columns='CENSUS2010POP') )

票数 0
EN

Stack Overflow用户

发布于 2019-04-25 18:10:51

将CTYNAME作为索引,因为它们是唯一的,然后使用groupby STNAME,并使用n最大方法获取前3个填充状态。

代码语言:javascript
运行
复制
df = df.set_index('CTYNAME')
df.groupby('STNAME')['CENSUS2010POP'].nlargest(3).reset_index()
票数 0
EN

Stack Overflow用户

发布于 2019-04-26 18:24:45

另一种解决方案:

代码语言:javascript
运行
复制
df.sort_values('CENSUS2010POP',ascending=False).groupby('STNAME',as_index=False).head(3)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55844006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档