我知道有很多關于從 pandas 資料框中洗掉重復項的問題,但這有點不同。
我正在嘗試從資料框中洗掉重復項,但沒有獲得如下給定結果資料框中的實際輸出。實際上表中的資料太長了。為了便于理解,我在表中給出了虛擬資料。
健康)狀況:-
我需要洗掉重復項并從直徑列中獲取包含最大值的行。
有沒有一種使用給定 df 獲取結果資料框的好方法。
任何幫助,將不勝感激。謝謝 :)
東風:-
| 年齡 | 系統 | 直徑 | 一個 | b | C | d |
|---|---|---|---|---|---|---|
| 29 | 90 | 57 | 莫 | 莫 | 0 | 莫 |
| 29 | 90 | 58 | 莫 | 莫 | 0 | 莫 |
| 29 | 90 | 59 | 莫 | 莫 | 0 | 莫 |
| 29 | 90 | 60 | 莫 | 莫 | 0 | 莫 |
| 29 | 90 | 61 | 0 | 0 | 0 | 0 |
| 29 | 90 | 62 | 0 | 0 | 0 | 0 |
| 29 | 90 | 63 | 0 | 0 | 0 | 0 |
| 29 | 90 | 64 | 0 | 0 | 0 | 0 |
| 29 | 90 | 65 | 莫 | 莫 | 0 | 莫 |
| 29 | 90 | 66 | 莫 | 莫 | 0 | 莫 |
| 29 | 90 | 67 | 莫 | 莫 | 0 | 莫 |
| 29 | 90 | 68 | 莫 | 莫 | 0 | 莫 |
結果:-
| 年齡 | 系統 | 直徑 | 一個 | b | C | d |
|---|---|---|---|---|---|---|
| 29 | 90 | 60 | 莫 | 莫 | 0 | 莫 |
| 29 | 90 | 64 | 0 | 0 | 0 | 0 |
| 29 | 90 | 68 | 莫 | 莫 | 0 | 莫 |
uj5u.com熱心網友回復:
你能試試這個:
df['id']=df.groupby(['age', 'syst', 'a', 'b', 'c', 'd']).ngroup()
df['id2']=df['id'].shift(-1)
df2=df.drop_duplicates(subset=['age', 'syst', 'a', 'b', 'c', 'd','id','id2'],keep=False).drop(['id','id2'],axis=1)
print(df2)
'''
age syst diast a b c d
3 29 90 60 MO MO 0 MO
7 29 90 64 0 0 0 0
11 29 90 68 MO MO 0 MO
'''
uj5u.com熱心網友回復:
# create a flag to separate out the group based on column 'a'
# a is the only column that distinguishes the group
df['flag'] = np.nan
df['flag']=df['flag'].mask(df['a'].ne(df['a'].shift()), 1).cumsum().ffill()
# sort, drop duplicates, keep flag as one of the column
# finally drop the flag column
(df.sort_values(['age','syst','diast'])
.drop_duplicates(subset=['age','syst', 'a','b','c','d','flag'], keep='last')
.drop(columns='flag'))
age syst diast a b c d
3 29 90 60 MO MO 0 MO
7 29 90 64 0 0 0 0
11 29 90 68 MO MO 0 MO
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/518653.html
標籤:Python熊猫数据框
