Как рисовать из образца, пока не будет получено хотя бы одно значение каждого образца

Если вы пришли сюда, чтобы выбрать строки из фрейма данных, включив те, чье значение столбца НЕ является ни одним из списка значений, вот как перевернуть ответ unutbu для списка значений выше:

df.loc[~df['column_name'].isin(some_values)]

(Чтобы не включать одно значение, конечно, вы просто используете обычный оператор не равно, !=.)

Пример:

import pandas as pd
df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
                   'B': 'one one two three two two one three'.split()})
print(df)

дает нам

     A      B
0  foo    one
1  bar    one
2  foo    two
3  bar  three
4  foo    two
5  bar    two
6  foo    one
7  foo  three    

Подмножество только для тех строк, которые ARE NOT one или three в столбце B:

df.loc[~df['B'].isin(['one', 'three'])]

дает

     A    B
2  foo  two
4  foo  two
5  bar  two
1
задан cdbale 18 January 2019 в 16:48
поделиться

1 ответ

Я не думаю, что этот цикл будет очень эффективным, потому что вам нужно перезапускать генератор случайных чисел каждый раз, когда он проходит цикл. Вместо этого я бы предложил взять большую выборку c('A', 'B', 'C', 'D') с желаемыми вероятностями, затем посмотреть, когда вы впервые получили каждый элемент, и взять максимум из них. Это может потерпеть неудачу, если вам случится не рисовать какой-либо один тип, но с достаточно большой выборкой, которая становится невероятно маловероятной. Вот реализация моего предложения.

set.seed(1)

probs <- c(.1, .25, .25, .40)
samp <- sample(c('A', 'B', 'C', 'D'), size = 1000, replace = TRUE, prob = probs)

max(c(min(which(samp == 'A')), min(which(samp == 'B')), min(which(samp == 'C')), min(which(samp == 'D'))))
[1] 6
samp[1:6] # we get the final missing item on draw 6
[1] "D" "D" "C" "A" "D" "B"
0
ответ дан Joseph Clark McIntyre 18 January 2019 в 16:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: