How to optimize this majority vote method
This can be solved with a simple groupby operation, which can tell you how often each combination appears. Then you just need to compare this with your n and filter the data:
key = [&quot;begin&quot;, &quot;end&quot;, &quot;case&quot;]
n = len(systems) // 2

mask = df.groupby(key)[&quot;system&quot;].count() &gt; n

df.set_index(key)[mask] \
  .reset_index() \
  .drop(columns=&quot;system&quot;) \
  .drop_duplicates()

#    begin  end  case
# 0     10   14  0365

This outputs the same as your code on my machine, but not the same as the example output you gave in your question (which I think is wrong).
Note that I used integer division // instead of float division / and manually casting to int.
In general, if you find yourself using itertuples in pandas, you should think very hard if you cannot achieve your goal in another way, as that is one of the slowest ways to do something with all rows of a dataframe.