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