[英]Odd dropping of pandas rows based on conditions
我使用 function:
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
根据特定条件(其中 df.lab == 0)删除 pandas 行。 这在一个小的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 个。
如果只是关于过滤,为什么不使用:
dft = dft[dft['lab'] != 0]
这将过滤掉所有带有lab=0
的行。
错误是,当使用drop
时,它会根据index
消除,但是我的 df 是多个数据帧的串联,因此我不得不使用reset_index
来克服这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.