Skip to content

2026 Election Results

Tally and computation

import pandas

ballots = [
{"Kitty": 5, "Cassie": 9, "Zoe": 9, "Suzzy": 7, "Zirbel": 8},
{"Kitty": 9, "Cassie": 5, "Zoe": 0, "Suzzy": 7, "Zirbel": 8},
{"Kitty": 4, "Cassie": 9, "Zoe": 9, "Suzzy": 6, "Zirbel": 5},
{"Kitty": 9, "Cassie": 9, "Zoe": 7, "Suzzy": 7, "Zirbel": 3},
{"Kitty": 9, "Cassie": 9, "Zoe": 8, "Suzzy": 9, "Zirbel": 0},
{"Kitty": 8, "Cassie": 8, "Zoe": 0, "Suzzy": 8, "Zirbel": 9},
{"Kitty": 8, "Cassie": 9, "Zoe": 6, "Suzzy": 8, "Zirbel": 0},
{"Kitty": 9, "Cassie": 9, "Zoe": 9, "Suzzy": 9, "Zirbel": 2},
{"Kitty": 9, "Cassie": 9, "Zoe": 7, "Suzzy": 3, "Zirbel": 5},
{"Kitty": 5, "Cassie": 6, "Zoe": 9, "Suzzy": 2, "Zirbel": 0},
{"Kitty": 9, "Cassie": 6, "Zoe": 6, "Suzzy": 6, "Zirbel": 0},
{"Kitty": 5, "Cassie": 9, "Zoe": 5, "Suzzy": 7, "Zirbel": 5},
{"Kitty": 9, "Cassie": 9, "Zoe": 9, "Suzzy": 9, "Zirbel": 0},
{"Kitty": 9, "Cassie": 9, "Zoe": 9, "Suzzy": 9, "Zirbel": 0},
{"Kitty": 9, "Cassie": 9, "Zoe": 9, "Suzzy": 5, "Zirbel": 5},
{"Kitty": 9, "Cassie": 5, "Zoe": 5, "Suzzy": 2, "Zirbel": 9},
{"Kitty": 5, "Cassie": 9, "Zoe": 9, "Suzzy": 6, "Zirbel": 9},
{"Kitty": 1, "Cassie": 7, "Zoe": 1, "Suzzy": 0, "Zirbel": 9},
{"Kitty": 7, "Cassie": 9, "Zoe": 7, "Suzzy": 6, "Zirbel": 7},
{"Kitty": 9, "Cassie": 6, "Zoe": 7, "Suzzy": 8, "Zirbel": 0},
{"Kitty": 6, "Cassie": 7, "Zoe": 8, "Suzzy": 9, "Zirbel": 0},
{"Kitty": 9, "Cassie": 9, "Zoe": 8, "Suzzy": 9, "Zirbel": 7},
{"Kitty": 3, "Cassie": 3, "Zoe": 3, "Suzzy": 3, "Zirbel": 3},
{"Kitty": 4, "Cassie": 9, "Zoe": 9, "Suzzy": 9, "Zirbel": 8},
{"Kitty": 8, "Cassie": 8, "Zoe": 8, "Suzzy": 9, "Zirbel": 8},
{"Kitty": 9, "Cassie": 8, "Zoe": 7, "Suzzy": 5, "Zirbel": 6},
{"Kitty": 4, "Cassie": 8, "Zoe": 9, "Suzzy": 2, "Zirbel": 7},
{"Kitty": 5, "Cassie": 8, "Zoe": 7, "Suzzy": 6, "Zirbel": 0},
{"Kitty": 3, "Cassie": 3, "Zoe": 3, "Suzzy": 3, "Zirbel": 0},
{"Kitty": 9, "Cassie": 8, "Zoe": 5, "Suzzy": 7, "Zirbel": 0},
{"Kitty": 8, "Cassie": 9, "Zoe": 0, "Suzzy": 7, "Zirbel": 6},
{"Kitty": 7, "Cassie": 8, "Zoe": 7, "Suzzy": 9, "Zirbel": 9},
{"Kitty": 9, "Cassie": 9, "Zoe": 8, "Suzzy": 8, "Zirbel": 3},
{"Kitty": 9, "Cassie": 5, "Zoe": 3, "Suzzy": 6, "Zirbel": 0},
{"Kitty": 9, "Cassie": 9, "Zoe": 7, "Suzzy": 7, "Zirbel": 7},
{"Kitty": 9, "Cassie": 5, "Zoe": 6, "Suzzy": 9, "Zirbel": 0},
{"Kitty": 9, "Cassie": 4, "Zoe": 4, "Suzzy": 2, "Zirbel": 0},
{"Kitty": 0, "Cassie": 9, "Zoe": 9, "Suzzy": 9, "Zirbel": 9},
{"Kitty": 8, "Cassie": 7, "Zoe": 1, "Suzzy": 9, "Zirbel": 0},
{"Kitty": 8, "Cassie": 9, "Zoe": 8, "Suzzy": 3, "Zirbel": 3},
{"Kitty": 3, "Cassie": 3, "Zoe": 3, "Suzzy": 3, "Zirbel": 3},
{"Kitty": 8, "Cassie": 9, "Zoe": 8, "Suzzy": 8, "Zirbel": 0},
{"Kitty": 9, "Cassie": 9, "Zoe": 9, "Suzzy": 9, "Zirbel": 0},
]

seats = 4
seated = []
max_score = max(max(ballot.values()) for ballot in ballots)

#reweight
def reweight(ballot):
  seated_scores = [
      ballot[candidate] for candidate in ballot if candidate in seated
  ]
  weight = 1/(1+sum(seated_scores)/max_score)
  return {candidate: weight*ballot[candidate] for candidate in ballot}

def nextRound(ballots):
  reweightedBallots = [reweight(ballot) for ballot in ballots] 
  winner = pandas.DataFrame(reweightedBallots).sum().drop(seated).idxmax()
  print(pandas.DataFrame(reweightedBallots).sum())
  seated.append(winner)
  return reweightedBallots

while len(seated) < seats:
  nextRound(ballots)
  print(seated)

Algorithm from: https://electowiki.org/wiki/Reweighted_range_voting

Output

Kitty     303.0
Cassie    326.0
Zoe       271.0
Suzzy     275.0
Zirbel    163.0
dtype: float64
['Cassie']
Kitty     165.331715
Cassie    173.635932
Zoe       144.608937
Suzzy     147.641128
Zirbel     87.138130
dtype: float64
['Cassie', 'Kitty']
Kitty     112.267457
Cassie    123.387122
Zoe       102.995410
Suzzy     103.399289
Zirbel     64.317732
dtype: float64
['Cassie', 'Kitty', 'Suzzy']
Kitty     89.058688
Cassie    97.669160
Zoe       81.302232
Suzzy     79.479724
Zirbel    51.709730
dtype: float64
['Cassie', 'Kitty', 'Suzzy', 'Zoe']

=== Code Execution Successful ===