給定的
pd.DataFrame({'feature': [0.5,0.1,0.3,0.2,0.6,0.4,0.3], 'label': [0,1,2,2,1,2,0]})
我想應用以下規則:對于所有feature大于 0.2 的行,它們的標簽有 60% 的機會變為 2。否則它將保持不變。
我的解決方案是:
df.loc[df.feature > 0.2, 'label'] = [
np.random.choice(x, p=(0.6,0.4)) for x in zip(np.full(len(df.feature > 0.2), fill_value=2), df.loc[df.feature > 0.2, 'label'])]
有沒有更簡單的矢量化方法來做到這一點?
uj5u.com熱心網友回復:
Idea 像這個解決方案一樣按百分比設定掩碼,并且只設定更大的選定值,例如0.2:
N = 2
m = df.feature > 0.2
mask = np.random.choice([True, False], m.sum(), p=[0.6, 0.4])
df.loc[m, 'label'] = np.where(mask, N, df.loc[m, 'label'])
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/325914.html
