我有一個像下面這樣的資料框
| ID | 姓名 | 數字 |
|---|---|---|
| 1 | 站 | 2 |
| 1 | 丹尼 | 5 |
| 1 | 站 | 2 |
| 1 | 艾爾 | 4 |
| 1 | 站 | 2 |
| 1 | 杰克 | 9 |
| 1 | 安迪 | 11 |
| 1 | 亞當 | 22 |
| 1 | 廢話 | 44 |
| 1 | 廢話 | 66 |
我想提取記錄,直到最后一次出現 Sta。像下面這樣
| ID | 姓名 | 數字 |
|---|---|---|
| 1 | 站 | 2 |
| 1 | 丹尼 | 5 |
| 1 | 站 | 2 |
| 1 | 艾爾 | 4 |
| 1 | 站 | 2 |
我不知道我怎么能做到這一點。有人可以建議嗎?
uj5u.com熱心網友回復:
我會找到Sta's 最后一次出現并將其用作切片引數。有一個有趣的功能,我不知道我發現了這個答案,last_valid_index()在這里可能真的很有幫助。
filtered = df.loc[:df[df['name']=='Sta'].last_valid_index(),:]
uj5u.com熱心網友回復:
first, *_, last = df.index[df.name.eq('Sta')]
df.loc[first:last]
ID name number
0 1 Sta 2
1 1 Danny 5
2 1 Sta 2
3 1 elle 4
4 1 Sta 2
獲取Sta和索引的第一個和最后一個標簽df
uj5u.com熱心網友回復:
staRows = df.loc[df.name == "Sta", :]
lastStA = staRows.tail()
lastStaLoc = df.index[lastSta]
final = df.loc[0:lastStaLoc]
altFinal = df.loc[0:df.index[df.loc[df.name == "Sta", :].tail()]]
staRows 是名稱為 Sta 的每一行
lastSta 是 staRows 中的最后一行
lastStaLoc 是 lastSta 的位置
final 應該是直到 lastStaLoc 的行
如果您想變得花哨,altFinal 是一種單行解決方案。這都是未經測驗的,所以你可能需要除錯一下:)
uj5u.com熱心網友回復:
讓我們做groupby與transform idxmax
df[df.index<=df['name'].eq('Sta').iloc[::-1].groupby(df['ID']).transform('idxmax')]
ID name number
0 1 Sta 2
1 1 Danny 5
2 1 Sta 2
3 1 elle 4
4 1 Sta 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/370821.html
