我有一個看起來像這樣的資料框:
df = pd.DataFrame({'ID': ['001', '001', '002', '002'],
'Flag': ['Y', 'N', 'N', 'Y'],
'Snapshot Month': ['05', '06', '01', '02']})
| ID(不是唯一的) | 標志(是/否) | 快照月份(每個 ID 唯一) |
|---|---|---|
| 0001 | 是 | 05 |
| 0001 | ? | 06 |
| 0002 | ? | 01 |
| 0002 | 是 | 02 |
所有月份的資料都匯總到一個資料框中,因此 ID 不是唯一的,月份范圍從 01 到 12(01-12 都包括在內;為簡潔起見,我省略了大部分月份)。flag 變數只能從Yto N,而不是相反。此外,我們可以假設標志變數只能更改一次。
資料中有錯誤。例如,ID 0002 是非法的,因為它N按Y時間順序排列。
我希望能夠找出與這些資料錯誤相對應的 ID。
我嘗試的是找到一個由Y's 和N's 組成的資料框,并找到共同的 ID,然后自己進入行以查看是否發生了錯誤。但這種方法不僅效率低下,而且隨著資料的變大,也無法擴展。
由于快照月份的范圍是 01 - 12 (所有資料都來自同一年),我計算了一個由Y's 組成的資料框,快照月份為 12,并檢查它們在 12 以外的月份是否有任何N's。但是這也太手動了,找不到所有答案。我想知道是否有一些巧妙的方法來使用快照月。
uj5u.com熱心網友回復:
這是一種方法:
(i)set_index與'ID'
(ii) 將N值替換為np.nan
(iii) groupby“ID”(現在是索引)和前向填充np.nan值
(iv)groupby再次“ID”并查看是否有任何組具有 NaN 值(這意味著這些組具有前導N值)以及是否有創建帶有“ID”的布爾掩碼
(v) 使用 (iv) 中的面具 df
df = df.set_index('ID')
mask = (df['Flag']
.replace('N', np.nan)
.groupby(level=0).ffill()
.groupby(level=0).transform(lambda x: x.isna().sum()>0))
out = df.index[mask].unique().tolist()
輸出:
['002']
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/412454.html
標籤:
上一篇:以接近值順序排列資料框-R
