【问题标题】:Sorting dataframe on column and checking difference of top two values对列上的数据框进行排序并检查前两个值的差异
【发布时间】:2021-08-27 14:39:05
【问题描述】:

我有一个数据框dfas:

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

如何获得包含“投票百分比”差异小于 10 的前两方区域的数据框?

期望的输出:

Election Year    Region    Vote %
  2000             A        29.40
  2000             A        14.50
  2005             B        28.06
  2005             B        15.06
  2010             A        20.80
  2010             A        10.5

我尝试按“选举年”和“地区”进行分组。然后根据“投票百分比”进行排序。但我无法弄清楚如何让所有地区的投票百分比差异小于 10。

非常感谢任何建议。

【问题讨论】:

  • 我认为你想要做的是对你的匹配进行分组,然后生成一个基本上是“与最大值的差异”的列。之后,子集到与您的 10pc 事物匹配的行,然后返回。
  • @ifly6,是否需要对“投票百分比”列进行排序以获得前两个值的差异?
  • 在 2000 年的区域 A 中,两个最大的政党之间的差异大于 10%。是否有意将其包含在您的输出中?此外,您的原始数据有两行“16”。这是故意的吗?
  • @ifly6,这是一个错误。实际上,我必须寻找前两个政党之间的投票率低于 10% 的地区。因此,输出应该与我发布的不同。最后一行的索引应该为 17。我的错误。更新了数据集。

标签: python pandas dataframe data-science


【解决方案1】:
  1. Sort 数据框(如果尚未排序)。
  2. groupby - ['Election Year', 'Region']filter 排除 diff 大于 10 的那些组。
  3. 再次使用groupby 来提取每个grouptop 2 行。
k = df.sort_values(['Election Year', 'Region', 'Vote %'],
                   ascending=False)
df = (
    k.groupby(['Election Year', 'Region'])
    .filter(lambda x: any(x['Vote %']
                          .diff()
                          .abs()
                          .gt(10)
                          .iloc[:2])
            )
    .groupby(['Election Year', 'Region'])
    .apply(lambda x: x.iloc[:2])
    .reset_index(drop=True)
)

输出:

  Election Year  Votes  Vote %                 Party Region
0           2000  42289   29.40   Janata Dal (United)      A
1           2000  27618   11.20  Rashtriya Janata Dal      A
2           2005   1834   28.06                   NJM      B
3           2005   1334   15.06           Nationalist      B
4           2010  21114   20.80           Independent      A
5           2010   1042   10.50   Bharatiya Janta Dal      A

注意:删除多余的列(如果需要)。

【讨论】:

  • 我如何知道每个地区最大的两个政党的投票百分比是否小于 10?
  • Groupby 然后过滤那些投票百分比本身小于10的人
猜你喜欢
  • 2018-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-31
  • 1970-01-01
相关资源
最近更新 更多