簡體   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