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