簡體   English   中英

根據一列的連續值獲取數據框的行

[英]Get the rows of dataframe based on the consecutive values of one column

有沒有辦法根據特定列的值獲取連續行? 例如:

第一列 列2 看法
第 1 行 1 2 C
行 2 3 4 一種
第 3 行 5 6
第 4 行 7 8
第5行 9 10 n

我需要獲取包含單詞“app”字母的行作為視圖,因此在本示例中,我需要將row2、row3 和 row4保存在列表中。

這是一個通用的方法。 我使用index_slice_by_substring()來生成代表開始和結束行的整數元組。 函數rows_by_consecutive_letters()獲取您的數據rows_by_consecutive_letters() 、要檢查的列名以及您要查找的字符串,對於返回值,它利用.iloc按整數值抓取表的一部分。

獲取切片索引的關鍵是使用''.join(df[column])將“View”列值連接到一個字符串中,並從左到右檢查與條件字符串長度相同的子字符串,直到匹配為止

def index_slice_by_substring(full_string, substring) -> tuple:
    len_substring = len(substring)
    len_full_string = len(full_string)
    for x0, x1 in enumerate(range(len_substring,len_full_string)):
        if full_string[x0:x1] == substring:
            return (x0,x1)

def rows_by_consecutive_letters(df, column, condition) -> pd.DataFrame:
    row_begin, row_end = index_slice_by_substring(''.join(df[column]), condition)
    return df.iloc[row_begin:row_end,:]

print(rows_by_consecutive_letters(your_df,"View","app"))

返回:

   column1  column2 View
1        3        4    a
2        5        6    p
3        7        8    p

不是pythonic方式,而是做工作:

keep = []
for i in range(len(df) - 2):
    if (df.View[i]=='a') & (df.View[i+1] =='p') & (df.View[i+2] =='p'):
        keep.append(df[i])
        keep.append(df[i+1])
        keep.append(df[i+2])

結果:

在此處輸入圖片說明

您可以使用str.find但這只會找到您的搜索詞的第一次出現。

search = 'app'
i = ''.join(df.View).find(search)
if i>-1:
    print(df.iloc[i: i+len(search)])

輸出

      column1  column2 View                         
row2        3        4    a
row3        5        6    p
row4        7        8    p

要查找無(沒有錯誤檢查),您可以使用re.finditer一次和所有出現。 結果是數據幀切片列表。

import re
search='p'   # searched for 'p' to find more than one
[df.iloc[x.start():x.end()] for x in re.finditer(search, ''.join(df.View))]

輸出

[      column1  column2 View                        
 row3        5        6    p,
       column1  column2 View                         
 row4        7        8    p]

暫無
暫無

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

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