[英]How can I choose a random sample of size n from values from a single pandas dataframe column, with repeating values occurring a maximum of 2 times?
我的 dataframe 看起來像這樣:
Identifier Strain Other columns, etc.
1 A
2 C
3 D
4 B
5 A
6 C
7 C
8 B
9 D
10 A
11 D
12 D
我想隨機選擇 n 行,同時保持應變值的多樣性。 例如,我想要一組 6 人,所以我希望我的最后幾行至少包括每種菌株中的一種,其中兩種菌株出現兩次。
我嘗試將 Strain 列轉換為 numpy 數組並使用方法 random.choice 但似乎沒有運行。 我也嘗試過 using.sample 但它不能最大限度地提高應變多樣性。
這是我最新的嘗試,它按順序輸出大小為 7 的樣本(標識符 0-7),並且菌株都是相同的。
randomsample = df[df.Strain == np.random.choice(df['Strain'].unique())].reset_index(drop=True)
我相信 numpy 中有一些東西可以做到這一點,但不記得是哪個。 這是一個相當快的方法:
n
行所以在代碼中:
n = 6
df = df.sample(frac=1) # step 1
enums = df.groupby('Strain').cumcount() # step 2
orders = np.argsort(enums) # step 3
samples = df.iloc[orders[:n]] # step 4
Output:
Identifier Strain Other columns, etc.
2 3 D NaN
7 8 B NaN
0 1 A NaN
5 6 C NaN
4 5 A NaN
8 9 D NaN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.