根据条件递归合并行 pandas 数据框

recursively merging rows pandas dataframe based on the condition

社区,

我有一个排序的 pandas 数据框,如下所示:

我想合并在 startend 列中具有重叠值的行。这意味着如果初始行的 end 值大于顺序行或任何其他顺序行的 start 值,它们将合并为一行.例如第 3、4 和 5 行。我期望的输出是:

为此,我正在尝试实现递归函数,它将遍历数据帧直到条件起作用,然后 return 给我一个数字,用于搜索结束行的位置。

但是,我尝试实现的功能 return 是空数据框。你能帮我吗,我应该把注意力放在哪里,或者如果递归不是解决方案,我可以建立什么替代方案?

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

我在这里看不到使用递归的好处,所以我只是遍历行,为输出数据帧逐行构建行,例如像这样:

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)