首页 > 解决方案 > 如何将两个特定行合并为一行

问题描述

我有一个数据框,它有 1000 多行和 20 多列。我正在尝试将两个特定行合并为一行。

这是数据框。

      Name     Document ID   .....   Text          Product
0     Sam      ABC-002-0789          Blah01...        A
1     Dave     ABC-002-1672          Blah02...        BG
2     Pete     BCC-076-7689          Blah03...        RT
:       :           :          :        :              :
n     Chris    WHD-012-1745(1)       Blah012...       B6
n+1   Chris    WHD-012-1745(2)       Blah022...       B6
:       :           :                   :             :
1800  Qutin    ABC-002-0789          Blah99...        Z9

我正在尝试将第 n 行和 n+1 行合并为一行,这两行除了文本列之外是相同的。我想将它们合并成一行,特定于文本列。

这是我想要的输出

      Name     Document ID   .....   Text          Product
0     Sam      ABC-002-0789          Blah01...        A
1     Dave     ABC-002-1672          Blah02...        BG
2     Pete     BCC-076-7689          Blah03...        RT
:       :           :          :        :             :
n     Chris    WHD-012-1745       Blah012 Blah022 ..  B6
:       :           :                   :             :
1799  Qutin    ABC-002-0789          Blah99...        Z9

我知道我可以使用 groupby、apply 和 join 函数来做到这一点,但我不知道如何定位我想要的行。我想知道除了使用 groupby、apply 和 join 之外,还有什么更快的方法可以做到这一点。

标签: pythonpandas

解决方案


我会首先清理文档ID:

df['DocumentID'] = df['DocumentID'].str.replace(r'\(\d\)', '', regex=True)
df

在此处输入图像描述

然后按此文档 ID 分组(现在将有重复):

def concat_text(rows):
    row = rows.iloc[0]
    if len(rows) > 1:
        row['Text'] = " ".join(rows['Text'])
    return row

df.groupby('DocumentID').apply(concat_text).reset_index(drop=True)

在此处输入图像描述


推荐阅读