[英]How to extract a subset of dataframe based on the last occurence of a string in a column in pandas?
我有一個 dataframe 喜歡下面
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 |
我不確定我該怎么做。 有人可以建議嗎?
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
的第一個和最后一個標簽
我會找到Sta
的最后一次出現並將其用作切片參數。 有一個有趣的 function 我不知道我發現了這個答案, last_valid_index()
在這里可能真的很有幫助。
filtered = df.loc[:df[df['name']=='Sta'].last_valid_index(),:]
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 是一種解決方案。 這都是未經測試的,所以你可能需要調試一下:)
讓我們用transform
idxmax
做groupby
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.