首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有更好的方法来获得在一列中具有最大值的组?

有没有更好的方法来获得在一列中具有最大值的组?
EN

Stack Overflow用户
提问于 2019-08-02 01:47:00
回答 1查看 31关注 0票数 0

我正在寻找一个更优雅的解决方案,以获得每个熊猫组的唯一赢家(最大票数)的名单。

我已经下载了California election results,并获得了我想在一个名为create_df的函数中使用的数据。

代码语言:javascript
复制
df = create_df()
df.head()
代码语言:javascript
复制
    candidate   county  district    office      party   precinct    votes
0   JOHN COX    ALAMEDA NaN         GOVERNOR    REP     200100      49.0
1   JOHN COX    ALAMEDA NaN         GOVERNOR    REP     200200      55.0
2   JOHN COX    ALAMEDA NaN         GOVERNOR    REP     200300      26.0
3   JOHN COX    ALAMEDA NaN         GOVERNOR    REP     200600      28.0
4   JOHN COX    ALAMEDA NaN         GOVERNOR    REP     200700      35.0

我目前的实现是这样的:

代码语言:javascript
复制
county_votes = df.query("office == 'GOVERNOR'")\
                 .groupby(["county", "party"], as_index=False)\
                 .votes.sum()
winners = county_votes.reindex(
    county_votes.groupby("county").votes.idxmax().values
)[["county", "party"]]

winner.head()
代码语言:javascript
复制
    county      party
0   ALAMEDA     DEM
2   ALPINE      DEM
5   AMADOR      REP
7   BUTTE       REP
9   CALAVERAS   REP

有没有更好的方法?

EN

回答 1

Stack Overflow用户

发布于 2019-08-02 02:34:50

我找到了另一种方法,而且看起来也更快。

代码语言:javascript
复制
%%timeit
county_votes = df.query("office == 'GOVERNOR'")\
    .groupby(["county", "party"], as_index=False)\
    .votes.sum()
county_votes.reindex(
    county_votes.groupby("county").votes.idxmax().values
)[["county", "party"]].head()

42.4 ms±97µs /环路(平均值±标准dev.共7次运行,每次10次循环)

代码语言:javascript
复制
%%timeit
df.query("office == 'GOVERNOR'")\
    .groupby(["county", "party"], as_index=False)\
    .votes.sum()\
    .sort_values(['county', 'votes'], ascending=[True, False])\
    .drop_duplicates(subset="county").head()

31.6 ms±60.9µs /环路(平均值±标准dev.共7次运行,每次10次循环)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57314439

复制
相关文章

相似问题

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