Вы, конечно, можете избежать цикла.
Найдите все комбинации, сопоставьте их идентификаторы с зарплатой, а затем рассчитайте сумму для каждой комбинации.Затем просто поднабор тех комбинаций, где зарплата составляет от 48 000 до 50 000
Настройка
import pandas as pd
import numpy as np
from itertools import combinations
np.random.seed(123)
df = pd.DataFrame({'ID': np.arange(1,51,1),
'Salary': np.random.randint(7000,12000,50)})
# ID to Salary dictionary
d = df.set_index('ID').Salary.to_dict()
Код
n = 6 # length of combination tuples
# Create df of people and their salary
df2 = pd.DataFrame(list(combinations(df.ID, n)),
columns=['p'+str(i) for i in np.arange(1,n+1,1)])
df2 = pd.concat([df2, df2.replace(d).add_suffix('_salary')], axis=1)
# Subset to those within the range you care about
df2[df2[[col for col in df2.columns if '_salary' in col]].sum(1).between(48000,50000)]
Вывод
p1 p2 p3 p4 p5 p6 p1_salary p2_salary p3_salary p4_salary p5_salary p6_salary
48465 1 2 6 10 19 32 10582 10454 7096 7111 7039 7588
48481 1 2 6 10 19 48 10582 10454 7096 7111 7039 7371
209845 1 3 5 6 9 10 10582 8346 8593 7096 7942 7111
209854 1 3 5 6 9 19 10582 8346 8593 7096 7942 7039
209883 1 3 5 6 9 48 10582 8346 8593 7096 7942 7371
...
(Есть 188 531 таких комбинаций).Должны быть еще более эффективные решения.