根据条件,熊猫行奇数下降

时间:2020-04-16 13:26:41

标签: python pandas dataframe

我使用函数:

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)删除熊猫行。这在较小的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个,所以没有加起来。

2 个答案:

答案 0 :(得分:0)

如果仅是过滤,为什么不使用:

dft = dft[dft['lab'] != 0]

这将用lab=0过滤掉所有行。

答案 1 :(得分:0)

错误是,使用drop时它会基于index而消除,但是我的df是服务器数据帧的串联,因此我不得不使用reset_index来解决问题。