在数据帧中,如何基于同时满足不同条件的起始行和结束行过滤一组行?

2024-10-03 23:22:15 发布

您现在位置:Python中文网/ 问答频道 /正文

在数据帧中,如何基于同时满足不同条件的起始行和结束行过滤一组行

如果其中一个字符串列包含特定的子字符串,则该行是起始行。然后,如果我的字符串列包含另一个子字符串的另一行,则该行是结束行。我需要一种方法来过滤这两行之间的所有行

我试着用

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

这给了我一个布尔级数,它的起始行为“True”。但是,我不知道如何进一步实现我上面描述的目标

例如,考虑一个数据框如下

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

使用“开始”和“停止”子字符串,我希望能够过滤掉“TransactionStart”行和“TransactionEnd”行之间的所有行。即,仅包含['Date1',200]和['Date2',300]的两行


Tags: 数据方法字符串dfdatapage条件start
1条回答
网友
1楼 · 发布于 2024-10-03 23:22:15

返回带有.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      

相关问题 更多 >