繁体   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