我有一個資料框,如:
Tag Class
A P
A Q
B P
B Q
C P
C Q
C R
我想按 Tag 分組并保留 Class 的第一個值。但是,如果以前使用過此值,請在標記中查找下一個值。
預期輸出:
Tag Class
A P
B Q
C R
如果標簽沒有剩余的類,則回傳 null(或不在輸出中包含 Tag)。
我一直在嘗試使用 drop_duplicates 來做到這一點,但沒有運氣。我怎樣才能做到這一點?
uj5u.com熱心網友回復:
我們可以定義一個自定義函式讓我們呼叫它dedupe,它在一個set變數中維護一個內部狀態s以跟蹤以前使用過的類,并為每個組回傳以前未使用的第一個可用類。
def dedupe():
s = set()
def _dedupe(c):
c = c[~c.isin(s)]
if len(c) > 0:
s.add(c.iat[0])
return c.iat[0]
return _dedupe
df.groupby('Tag', sort=False, as_index=False)['Class'].apply(dedupe())
Tag Class
0 A P
1 B Q
2 C R
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/369023.html
