【问题标题】:How to Merge Two Specific Rows into One Row如何将两个特定行合并为一行
【发布时间】:2021-02-03 10:43:03
【问题描述】:

我有一个数据框,它有 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 之外还有什么更快的方法。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我会先清理文档 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)
    

    【讨论】:

    • 非常感谢,克里斯!它工作得很好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 2015-02-08
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 2021-01-10
    • 2017-08-17
    相关资源
    最近更新 更多