繁体   English   中英

根据条件奇数丢弃 pandas 行

[英]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

我不确定错误可能来自哪里。 我尝试使用fracdf.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM