[英]Getting sub-dataframe based on difference of top two values of a column in grouped dataframe
我有一個 dataframe df
為:
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
如何獲得 dataframe 包含的區域,其中前兩個政黨的“投票百分比”差異小於 10?
所需的 output:
Election Year Region Vote %
2000 B 14.50
2000 B 12.40
2000 C 19.80
2000 C 10.80
2005 A 15.80
2005 A 13.10
2005 B 1.20
2005 B 11.10
2005 C 15.06
2005 C 18.06
2010 C 17.70
2010 C 14.70
我嘗試按“選舉年”和“地區”進行分組。 然后根據“投票百分比”進行排序。 但我無法弄清楚如何讓所有地區的投票百分比差異小於 10。
任何建議都受到高度贊賞。
嘗試這個:
df[df.groupby(['Election Year', 'Region'])['Vote %'].diff().abs().bfill() < 10]
Election Year Votes Vote % Party Region
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 JanvadiParty 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
16 2010 22211 17.70 Congress C
17 2010 20011 14.70 INC C
由於您已經只有 2 個最大的派對,您可以使用上面的代碼。 首先按年份和地區分組,然后獲得百分比票數的差異。 然后使用差值的絕對值來防止負數,然后回填所有條目,這樣每一行都有一個值。 然后與 10 進行比較。
我認為您可以在年份和地區列上使用DataFrame.groupby
,然后使用自定義 function 對結果進行調用agg
對投票百分比進行排序並計算兩個最大值之間的差異
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.