簡體   English   中英

使用熊貓隨機刪除帶有條件的行

[英]Randomly dropping rows with a condition using pandas

我有一個不平衡的數據集,例如:

tag    #elements    
a      1500
b      3250
c      320   
d      260

這會導致過度擬合。 我想隨機消除某些具有特定名稱的行,以便我的數據集更加平衡。 例如,消除后我想要這樣的東西;

tag    #elements    
a      300
b      300
c      300
d      260

但是,我建議您使用它,如果可能的話,可以在某些范圍內隨機消除它們,例如元素的最低數量(在我們的示例中為260個)加上50個左右(我不知道正確的執行方式)。 因此,消除后的元素數量將如下所示:

tag    #elements    
a      307
b      286
c      275
d      260

請注意,這些數字與標簽數相對應。 數據集的總長度為5330。 我想減少它。

提前致謝。

使用sample ,您可以這樣操作:

#create a dataframe like yours
df = pd.DataFrame({'tag':['a']*1500 + ['b']*3250 + ['c']*320 + ['d']*260,'col1':range(5330)})
min_size = df.groupby('tag').count().min()[0] #here it's 260
max_plus = 50
df_sample = (df.groupby('tag',as_index=False)
               .apply(lambda x: x.sample(min(len(x), min_size + np.random.randint(max_plus,size=1))))
               .reset_index(drop=True)) # this is not mandatory, it depends of your needs

然后例如我的嘗試:

print (df_sample.groupby('tag').count())
Out[292]: 
     col1
tag      
a     270
b     299
c     287
d     260

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM