簡體   English   中英

如何根據 pandas 列中最后一次出現的字符串提取 dataframe 的子集?

[英]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 idxmaxgroupby

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM