簡體   English   中英

在 Pandas dataframe 中,如何根據滿足不同條件的起始行和結束行過濾一組行?

[英]In a Pandas dataframe, how to filter a set of rows based on a start row and end row both satisfying different conditions?

在 Pandas dataframe 中,如何根據滿足不同條件的起始行和結束行過濾一組行?

如果我的其中一個字符串列包含特定的 substring,則該行是起始行。 然后,如果有另一行我的字符串列包含另一個 substring,則該行是結束行。 我需要一種方法來過濾這兩者之間的所有行。

我試圖找到 start_row 使用,

start_row = df_page['StringCol'].str.contains('SubStrForStartRow')

這給了我一個 boolean 系列,它的起始行為“True”。 但是,不知道如何進一步實現我上面描述的。

例如,考慮如下 dataframe

data = [['UnwantedRow', ''],['TransactionStart', ''],['Date1', 200],['Date2', 300],['TransactionEnd', ''],['UnwantedRow','']]
df = pandas.DataFrame(data, columns=['Transaction', 'Value'])

使用“開始”和“停止”子字符串,我希望能夠過濾掉“TransactionStart”行和“TransactionEnd”行之間的所有行。 也就是說,僅包含 ['Date1', 200] 和 ['Date2', 300] 的兩行。

使用.index[0]返回開始行和結束行的索引號,並使用iloc過濾這些行。 iloc 的上限是獨占的,這就是我使用end_row+1的原因:

data = [['UnwantedRow', ''],['TransactionStart', ''],['Date1', 200],['Date2', 300],['TransactionEnd', ''],['UnwantedRow','']]
df = pd.DataFrame(data, columns=['Transaction', 'Value'])
start_row = df[df['Transaction'].str.contains('TransactionStart')].index[0]
end_row =  df[df['Transaction'].str.contains('TransactionEnd')].index[0]
df = df.iloc[start_row:end_row+1]
df
Out[1]: 
        Transaction Value
1  TransactionStart      
2             Date1   200
3             Date2   300
4    TransactionEnd      

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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