Python 在列上排序dataframe并检查前两个值的差异

Python 在列上排序dataframe并检查前两个值的差异,python,pandas,dataframe,data-science,Python,Pandas,Dataframe,Data Science,我有一个数据帧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

我有一个数据帧
df
as:

  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%

非常感谢您的任何建议

  • 排序
    数据帧(如果尚未排序)
  • groupby
    -
    [“选举年”、“地区”]
    筛选出
    diff
    大于
    10
    的组
  • 再次使用
    groupby
    提取每个
    组的
    前2行
  • 输出:
    注意:删除额外的列(如果需要)。

    我认为您要做的是按匹配项分组,然后生成一个基本上是“与最大值不同”的列。在这之后,将子集合到与10pc匹配的行中,然后返回。@ifly6,我是否需要对列“投票%”进行排序,以获得前两个值的差值?在2000年的区域A中,两个最大党派之间的差值大于10%。将其包含在输出中是有意的吗?此外,原始数据有两行'16'。这是故意的吗?@ifly6,这是个错误。事实上,我必须寻找两大政党之间投票率低于10%的地区。因此,输出应该与我发布的内容不同。最后一行的索引应为17。我的错误。更新了数据集。如何查找每个地区最大的两个政党的投票率是否低于10%?Groupby,然后筛选投票率本身低于10%的政党
    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