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 ===