Как создать сегменты с таким же количеством элементов из кадра данных pandas с двумя индексами и счетом? - PullRequest
1 голос
/ 24 января 2020

У меня есть фрейм данных с 3 уровнями:

  • index "users_A"
  • index "users_B"
  • оценка, целое число для каждого (user_a x user_b )

Мы не можем приписать user_B к user_A, если счет равен 0

Идея состоит в том, чтобы отбросить дублированный user_b, чтобы создать раздел всех user_b, где мы максимизируем минимальное количество user_b приписывается user_a. Оценка должна быть критерием принятия решения, но есть много дубликатов, и я в итоге не могу найти user_b для моих последних пользователей.

Пример: здесь, из ввода набора данных, я хочу, чтобы функция получала набор данных вывод

import pandas as pd
import random

#This code will generate a dataframe similar to mine
users_A = [0, 1, 2]
users_B = ['a','b','c','d','e','f']
input = pd.DataFrame(index=pd.MultiIndex.from_product([users_A, users_B], names=['users_A', 'users_B']))
input["scores"] = pd.Series([random.randrange(0, 11) for i in range(18)] , index=pd.MultiIndex.from_product([users_A, users_B]))
input = input[input.scores %2 !=0 ]
print(input)

>>>
                 scores
users_A users_B        
0       a             7
        b             7
        d             7
1       a             9
        b             3
        e             5
        f             5
2       a             1
        b             1
        c             1
        e             3
        f             7

Из этого ввода я хочу вывод без дубликата, где каждый пользователь user_A получает как минимум 2 user_B, потому что это возможно, и для максимизации суммы баллов на пользователя user_A

Вывод :

>>>
                 scores
users_A users_B        
0       a             7
        d             7
1       b             3
        e             5
2       c             1
        f             7

(я максимизировал сумму на одну руку, возможно, это не оптимальное решение, но показывает, какой тип раздела я хочу)

Есть какие-нибудь подсказки, как решить эту проблему? ? Я вижу решение, в котором я вычисляю все возможные разделы и после этого выбираю наиболее сбалансированные, но у меня большой пул пользователей, и я хочу развернуть это - для внутреннего инструментария, но он должен вычислять res в считанные секунды ...

Спасибо !!!

...