簡體   English   中英

根據條件遞歸合並行 pandas dataframe

[英]recursively merging rows pandas dataframe based on the condition

社區,

我有一個排序的 pandas dataframe 如下所示:

排序的數據框

我想合並在開始列和結束列中具有重疊值的行。 這意味着如果初始行的結束值大於序列的開始值或任何其他序列的開始值,它們將被合並為一行。 示例是第 3、4 和 5 行。我期望的 Output 是:

在此處輸入圖像描述

為此,我正在嘗試實現遞歸 function,它將遍歷 dataframe 直到條件工作,然后返回一個用於搜索結束行位置的數字。

但是,我試圖實現的功能返回給我空的 dataframe。 你能幫我嗎,我應該把注意力放在哪里,或者如果遞歸不是解決方案,我可以建立什么替代方案?

def row_merger(pd_df):

    counter = 0
    new_df = pd.DataFrame(columns=pd_df.columns)

    for i in range(len(pd_df) - 1):
        def recursion_inside(pd_df, counter = 0):
            counter = 0
            if pd_df.iloc[i + 1 + counter]["q.start"] <= pd_df.iloc[i]["q.end"]:
                counter = counter+1
                recursion_inside(pd_df, counter)
            else:
                return counter
        new_row = {"name": pd_df["name"][i], "q.start": pd_df.iloc[i]
                   ["q.start"], "q.end": pd_df.iloc[i+counter]["q.start"]}
        new_df.append(new_row, ignore_index=True)
    return new_df

我沒有看到在這里使用遞歸的好處,所以我只需要遍歷行,為 output Z6A8064B5DF4794555500553C47C55057DZ 逐一構建行,例如:

def row_merger(df_in):

    if len(df_in) <= 1:
        return df_in

    rows_out = []
    current_row = df_in.iloc[0].values

    for next_row in df_in.iloc[1:].values:
        if next_row[1] > current_row[2]:
            rows_out.append(current_row)
            current_row = next_row
        else:
            current_row[2] = max(current_row[2], next_row[2])
    
    rows_out.append(current_row)
    return pd.DataFrame(rows_out, columns=df_in.columns)

暫無
暫無

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

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