【问题标题】:merge row with next row in dataframe pandas将数据框熊猫中的行与下一行合并
【发布时间】:2018-05-07 02:38:49
【问题描述】:

我在 pandas 中有一个包含多列的数据框。我想将每一行与下一行合并。 示例:

输入数据框:

A   B   C
a1  a2  a3
b1  b2  b3
c1  c1  c3
d1  d2  d3

输出数据框:

A1   B1   C1  A2   B2   C2
a1   a2   a3  b1   b2   b3
b1   b2   b3  c1   c2   c3
c1   c2   c3  d1   d2   d3
d1   d2   d3  NaN  NaN  NaN

我想出的解决方案是复制原始数据帧,将索引更改为 index - 1,然后按索引合并两个数据帧。 有没有其他解决办法?

【问题讨论】:

    标签: python pandas dataframe merge rows


    【解决方案1】:

    shiftjoinconcatassign 一起使用,对于新列名称add_suffix 很有用:

    df1 = df.add_suffix('1').join(df.shift(-1).add_suffix('2'))
    

    df1 = pd.concat([df.add_suffix('1'), df.shift(-1).add_suffix('2')], axis=1)
    

    df1 = df.add_suffix('1').assign(**df.shift(-1).add_suffix('2'))
    
    
    print (df1)
       A1  B1  C1   A2   B2   C2
    0  a1  a2  a3   b1   b2   b3
    1  b1  b2  b3   c1   c1   c3
    2  c1  c1  c3   d1   d2   d3
    3  d1  d2  d3  NaN  NaN  NaN
    

    【讨论】:

      【解决方案2】:

      你可以使用

      In [204]: pd.concat([df.add_suffix(1), df[1:].reset_index(drop=True).add_suffix(2)],
                          axis=1)
      Out[204]:
         A1  B1  C1   A2   B2   C2
      0  a1  a2  a3   b1   b2   b3
      1  b1  b2  b3   c1   c1   c3
      2  c1  c1  c3   d1   d2   d3
      3  d1  d2  d3  NaN  NaN  NaN
      

      并且,将其扩展到一般用途

      In [206]: N = 3   # Say 3 more times
      
      In [207]: pd.concat([df.add_suffix(1)] + 
                          [df[x+1:].reset_index(drop=True).add_suffix(x+2)
                           for x in range(N)], axis=1)
      Out[207]:
         A1  B1  C1   A2   B2   C2   A3   B3   C3   A4   B4   C4
      0  a1  a2  a3   b1   b2   b3   c1   c1   c3   d1   d2   d3
      1  b1  b2  b3   c1   c1   c3   d1   d2   d3  NaN  NaN  NaN
      2  c1  c1  c3   d1   d2   d3  NaN  NaN  NaN  NaN  NaN  NaN
      3  d1  d2  d3  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
      

      【讨论】:

        猜你喜欢
        • 2020-10-26
        • 2019-07-02
        • 1970-01-01
        • 2020-11-23
        • 1970-01-01
        • 1970-01-01
        • 2018-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多