【问题标题】:Pandas Groupby and sorting columns simultaneouslyPandas Groupby 和同时对列进行排序
【发布时间】:2021-08-27 05:54:38
【问题描述】:

我有一个数据框dfas:

  Election Year     Votes   Vote %      Party              Region   
0   2000            42289   29.40   Janata Dal (United)     A
1   2000            27618   19.20   Rashtriya Janata Dal    A
2   2000            20886   14.50   Bahujan Samaj Party     B 
3   2000            17747   12.40   Congress                B
4   2000            14047   19.80   Independent             C
5   2000            17047   10.80   JLS                     C
6   2005            8358    15.80   Janvadi Party           A
7   2005            4428    13.10   Independent             A
8   2005            1647    1.20    Independent             B
9   2005            1610    11.10   Independent             B
10  2005            1334    15.06   Nationalist             C
11  2005            1834    18.06   NJM                     C
12  2010            21114   20.80   Independent             A
13  2010            1042    10.5    Bharatiya Janta Dal     A
14  2010            835     0.60    Independent             B
15  2010            14305   15.50   Independent             B
16  2010            22211   17.70   Congress                C
16  2010            20011   14.70   INC                     C

如何获得每个选举年有两个或更多政党获得超过 10% 投票百分比的地区列表?

我使用以下代码在按“选举年份”和“地区”分组后按降序对“投票百分比”进行排序,然后每年比较前 2 个投票百分比,但它给出了错误。

df1 = df.groupby(['Election Year','Region'])sort_values('Vote %', ascending = False).reset_index()

如何纠正错误,因为我想在排序后获得每个地区每年前 2 名的“政党”,然后查看他们是否在每个选举年获得超过 10% 的选票?

期望的输出:

Election Year    Region    Vote %
  2000             A        29.40
  2000             A        19.40
  2000             C        19.80
  2000             C        10.80
  2005             A        15.80
  2005             A        13.10
  2005             C        15.06
  2005             C        18.06
  2010             A        20.80
  2010             A        10.5
  2010             C        17.70
  2010             C        14.70

输出仅包含每年投票率超过 10% 的地区以及按升序排列的选举年份和地区名称。所以,这里只有区域“A”和“C”会出现在输出中。

【问题讨论】:

  • 在再次询问几乎完全相同的问题之前,您应该尝试澄清您今天提出的前两个问题之一
  • 是的,我试图在评论部分澄清这一点。但我没有得到任何回应。因此,我提出了一个新问题。真的很抱歉创建另一个线程。但是你可以帮助我在这个线程中找出我的问题。
  • 正如每个人在这些 cmets 中所说的那样,请将您的预期输出放在您的问题中。不要只说我想要一个列表什么的,真正把你想要的确切结果
  • 我在这里更新了所需的输出。如果您能花时间帮助我,那对我来说会很好,因为我需要紧急解决它们。请考虑我的要求。

标签: python pandas dataframe data-science


【解决方案1】:

首先使用sort_values()对“投票百分比”排序值,然后使用groupby“选举年”和“地区”,最后使用head(2)获得前2行

df.sort_values(['Vote %'],ascending=False).groupby(['Election Year','Region']).head(2).reset_index(drop=True)

【讨论】:

  • 第一行不需要吧?列内没有%?
  • @tomjn 哦,是的,这是一个错误。感谢您的关注。答案已更新!
  • 是的。列内没有 %。
  • 我已经用所需的输出更新了我的问题。由于上面的代码不一样,如何得到它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 2019-12-06
  • 2019-06-27
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
相关资源
最近更新 更多