簡體   English   中英

如何從單個 pandas dataframe 列的值中選擇大小為 n 的隨機樣本,重復值最多出現 2 次?

[英]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 中有一些東西可以做到這一點,但不記得是哪個。 這是一個相當快的方法:

  1. 隨機打亂數據
  2. 枚舉每組中的行
  3. 按上面的枚舉排序
  4. 切片前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.

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