如何将多列合并为一列?

use*_*356 3 python series dataframe pandas

我有一个大约 1M 行和大约 20 列的数据框。我希望将这些列合并为一列;在同一唯一标识符列下。

为了说明这一点,这是原始数据:

          ID   Column 2 Column 3
0       1001          B        A
1       1002          C        D
2       1003          E        E
3       1004          G        H
Run Code Online (Sandbox Code Playgroud)

期望的结果:

          ID     Merged
0       1001          B
1       1001          A
2       1002          C
3       1002          D
4       1003          E
5       1003          E
6       1004          G
7       1004          H
Run Code Online (Sandbox Code Playgroud)

由于我想要合并大约 20 列;我需要通过循环合并它们。我使用了下面的代码,但总是出现内存错误。

master = pd.DataFrame()
for col in original_df:  # original_df is the dataframe combining the 20 columns
    if col != 'ID':
        temp = pd.DataFrame()
        temp['ID'] = original_df['ID']
        temp['Merged'] = original_df[col]
        master = master.append([temp])
Run Code Online (Sandbox Code Playgroud)

sac*_*cuL 5

你可以使用df.melt像这样的东西:

newdf = (df.melt(id_vars='ID', value_vars = ['Column 2', 'Column 3'],
                 value_name='Merged')
         .drop('variable', axis=1)
         .sort_values('ID'))

>>> newdf
     ID Merged
0  1001      B
4  1001      A
1  1002      C
5  1002      D
2  1003      E
6  1003      E
3  1004      G
7  1004      H
Run Code Online (Sandbox Code Playgroud)