У меня есть фреймворк с несколькими идентификаторами, а затем такой столбец для денег,
Id1 Id2 Id3 Money
1 10 13 10000
2 15 12 12500
3 20 11 60000
Мне нужен сценарий для случайного выбора строк, пока я не наберу 80 миллионов долларов денег. Я предполагаю, что цикл while, например ...
while sum(money) < 80000000:
df.sample()
Вы хотите иметь возможность выбирать одну и ту же строку более одного раза?
Несколько часов назад был задан аналогичный вопрос о поиск совпадений с помощью случайной выборки. Вы можете представить себе, что вы просто модифицируете, чтобы вместо этого проверять сумму, а не равные условия.
@ user3483203 нет, строки не должны дублироваться!
@roganjosh Я пробовал использовать метод образца pandas с циклом while, однако процесс продолжает возвращать исходный фрейм данных
Чтобы, возможно, немного перефразировать свой вопрос, кажется, что вы ищете случайную выборку строк, в которой сумма Money
составляет <80000000. Один из способов сделать это - использовать .sample()
для перетасовки в сочетании с .cumsum()
:
>>> reordered = df.sample(n=df.shape[0])
>>> lim = reordered[reordered.Money.cumsum() < 80000000]
Это будет выборка без замены.
Это, возможно, не самый эффективный с точки зрения памяти вариант по сравнению с последовательным сбором строк, но он должен помочь с разумным размером.
Ха, твое редактирование превзошло мой комментарий :) Я не думаю, что есть пандийский способ сделать это
Хотя, учитывая их пример, похоже, что определенно потребуется замена, и тогда вопрос в том, есть ли у вас шанс без цикла while: D
@Brad Solomon Я думаю, что это прямо здесь ... проблема, с которой я сталкиваюсь, заключается в том, что этот метод не может использовать логическое значение для целых чисел и строк. Один из моих идентификаторов выглядит примерно как bng78, поэтому его нельзя преобразовать в int.
@ jchristensen912 Я не уверен, что понимаю, какое исключение при трассировке?
Вы не необходимость питонический метод, просто хотелось бы. что ты уже испробовал?