Я использую функцию:
def df_proc(df, n):
print (list(df.lab).count(0)) # control label to see if it changes after conditional dropping
print ('C:', list(df.lab).count(1))
df = df.drop(df[df.lab.eq(0)].sample(n).index)
print (list(df.lab).count(0))
print ('C:', list(df.lab).count(1))
return df
Чтобы удалить pandas строк на основе определенных условий (где df.lab == 0). Это отлично работает на небольшом df (например, n = 100), однако, когда я увеличиваю количество строк в df, происходит что-то странное ... количество других меток (! = 0) также начинает уменьшаться и зависит от условия ..
Например:
# dummy example:
import random
list2 = [random.randrange(0, 6, 1) for i in range(1500000)]
list1 = [random.randrange(0, 100, 1) for i in range(1500000)]
dft = pd.DataFrame(list(zip(list1, list2)), columns = ['A', 'lab'])
dftest = df_proc(dft,100000)
дает ...
249797
C: 249585
149797
C: 249585
Но когда я запускаю это на моем фактическом df:
dftest = df_proc(S1,100000)
Я получаю странные изменения в ярлыках элементов управления.
467110
C: 70434
260616
C: 49395
Я не уверен, откуда могла возникнуть ошибка. Я пытался использовать frac
и df.query('lab == 0')
, но все еще сталкивался с той же ошибкой. Еще одна вещь, которую я заметил, заключается в том, что при небольших значениях n
контрольные метки остаются неизменными, это происходит только при увеличении n
.
dftest = df_proc(S1,1)
дает:
467110
C: 70434
467107
C: 70434
Что не суммируется, поскольку 3 образца были удалены не 1.