【问题标题】:Append two columns into one and separate them with an empty row pandas将两列合并为一列并用空行分隔它们 pandas
【发布时间】:2020-08-18 20:50:48
【问题描述】:

我需要将两列合并为一列并用空行分隔它们

这是当前代码(灵感来自this question):

import pandas as pd

df = pd.DataFrame({'Column 1':['A', 'B', 'C', 'D'],'Column 2':['E', 'F', 'G', 'H'],'Column 3':['I', 'J', 'K', 'L']})
df['col']=df['Column 1'].append(df['Column 2']).reset_index(drop=True)
print(df) 

输出:

  Column 1 Column 2 Column 3 col
0        A        E        I   A
1        B        F        J   B
2        C        G        K   C
3        D        H        L   D

想要的输出:

  Column 1 Column 2 Column 3 col
0        A        E        I   A
1        B        F        J   B
2        C        G        K   C
3        D        H        L   D
4      nan      nan      nan nan
5      nan      nan      nan   E
6      nan      nan      nan   F
7      nan      nan      nan   G
8      nan      nan      nan   H

可行吗?

【问题讨论】:

    标签: python-3.x pandas append row


    【解决方案1】:

    可以的

    df['col']=df['Column 1']
    df=df.append(pd.DataFrame({'Column 2':[np.nan]}).append(df[['Column 2']]).rename(columns={'Column 2':'col'})).reset_index(drop=True)
    
    df
    Out[127]: 
      Column 1 Column 2 Column 3  col
    0        A        E        I    A
    1        B        F        J    B
    2        C        G        K    C
    3        D        H        L    D
    4      NaN      NaN      NaN  NaN
    5      NaN      NaN      NaN    E
    6      NaN      NaN      NaN    F
    7      NaN      NaN      NaN    G
    8      NaN      NaN      NaN    H
    

    【讨论】:

      【解决方案2】:

      我们需要创建一个包含两列的Series,然后使用右连接将列和额外的值添加到数据框中。

      使用rightjoin如下:

      import pandas as pd
      
      df = pd.DataFrame({'Column 1':['A', 'B', 'C', 'D'],'Column 2':['E', 'F', 'G', 'H'],'Column 3':['I', 'J', 'K', 'L']})
      col=df['Column 1'].append(Series(np.nan)).append(df['Column 2']).reset_index(drop=True)
      col.name='col'
      df = df.join(col, how='right')
      print(df)
      

      【讨论】:

      • 完全为空的行仍然未完成
      【解决方案3】:

      我的想法是使用pandas.concat:

      import pandas as pd
      
      df = pd.DataFrame({'Column 1':['A', 'B', 'C', 'D'],'Column 2':['E', 'F', 'G', 'H'],'Column 3':['I', 'J', 'K', 'L']})
      col = df['Column 1'].append(pd.Series(float('nan'))).append(df['Column 2']).reset_index(drop=True)
      
      df = pd.concat([df, col], axis=1)
      
      print(df)
      

        Column 1 Column 2 Column 3    0
      0        A        E        I    A
      1        B        F        J    B
      2        C        G        K    C
      3        D        H        L    D
      4      NaN      NaN      NaN  NaN
      5      NaN      NaN      NaN    E
      6      NaN      NaN      NaN    F
      7      NaN      NaN      NaN    G
      8      NaN      NaN      NaN    H
      

      【讨论】:

        猜你喜欢
        • 2017-03-30
        • 2019-01-11
        • 1970-01-01
        • 2019-09-20
        • 1970-01-01
        • 1970-01-01
        • 2020-02-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多