我有一個資料框,它有兩列,“組”和“樣本編號”。“組”列的樣本編號“11”是唯一的。并且每組將只有一個“11”樣本編號,其后是 21 到 29 范圍內的樣本編號(例如,21、22、23、24、25、26、27、28、29),然后是樣本31 到 39 范圍內的數字(例如,31、32、33、34、35、36、37、38、39)。因此,每組應該有一個“11”樣本數,至少一個在 21 到 29 范圍內的樣本數和至少一個在 31 到 39 范圍內的樣本數。
我希望以這樣一種方式計算我的代碼通過每個組和
檢查組中是否有樣本編號 11。
檢查在 21 到 29 范圍內是否至少有一個樣本號。
檢查 31 到 39 范圍內是否至少有一個樣本號
如果這三個條件中的任何一個不匹配,則代碼會從資料框中洗掉整個組
以下是表格格式的資料框:
團體 | Sample_Number |
---|---|
Z007 | 11 |
Z007 | 21 |
Z007 | 22 |
Z007 | 23 |
Z007 | 31 |
Z007 | 32 |
Z008 | 11 |
Z008 | 31 |
Z008 | 32 |
Z008 | 33 |
Z009 | 11 |
Z009 | 21 |
Z009 | 22 |
Z009 | 23 |
Z010 | 21 |
Z010 | 22 |
Z010 | 23 |
Z010 | 24 |
Z010 | 31 |
Z010 | 32 |
Z010 | 33 |
Z010 | 34 |
df = pd.DataFrame([[Z007, 11],[Z007, 21] , [Z007, 22], [Z007, 23], [Z007, 31],[Z007, 32],[Z008, 11],[Z008, 31],[Z008, 32],[Z008, 33],[Z009, 11],[Z009, 21],[Z009, 22],[Z009, 23], [Z010, 21],[Z010, 22],[Z010, 23], [Z010, 24],[Z010, 31],[Z010, 32],[Z010, 33],[Z010, 34], columns=['Group', 'Sample_Number'])
代碼應洗掉組“Z008”,因為它沒有 21 到 29 范圍內的樣本號。它應該洗掉組“Z009”,因為它沒有 31 到 39 范圍內的樣本號。另外它應該洗掉組“Z010”,因為它沒有樣本號“11”。
預期答案如下:
團體 | Sample_Number |
---|---|
Z007 | 11 |
Z007 | 21 |
Z007 | 22 |
Z007 | 23 |
Z007 | 31 |
Z007 | 32 |
我只能對樣本號 11 執行此操作,但對于 (21 到 29 ) 和 (31 到 39) 范圍內的其他樣本號也很難做到這一點,下面是樣本號 11 的代碼
invalid_group_no = [i for i in df['Group'].unique() if
df[df['Group']== i]["Sample_Number"].to_list().count(11)!=1]
任何人都可以幫我提供其他樣品編號嗎?請隨意實施您自己的方式。任何幫助表示贊賞。
uj5u.com熱心網友回復:
嘗試這個:
groups = set(df['Group'][df['Sample_Number'] == 11]) & set(df['Group'][df['Sample_Number'].isin(range(21,30))]) & set(df['Group'][df['Sample_Number'].isin(range(31,40))])
df = df[df['Group'].isin(groups)]
Group Sample_Number
0 Z007 11
1 Z007 21
2 Z007 22
3 Z007 23
4 Z007 31
5 Z007 32
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/518241.html
上一篇:在每三組列上運行一個函式