如何将几列堆叠成一列,但保留一列 python

How to stack several column into one column but keep a column as it is in python

假设我有这个数据框

A B C
1 p q
1 q
2 p
2 p q

我想将 B 列和 C 列堆叠成一列(比如 D 列),但保持 A 列不变。如何得到这个? 这里是我想要的预期输出

A D
1 p
1 q
1 q
2 p
2 p
2 q

注意:据我所知,要将 B 列和 C 列堆叠到 D 列中,我可以使用以下代码:

df_temp = df[['B','C']]

df_temp = df_temp.stack().reset_index(name='D')

对列 A 使用 DataFrame.set_index:

df_temp = (df.set_index('A')[['B','C']]
              .stack()
              .reset_index(level=1, drop=True)
              .reset_index(name='D'))
print (df_temp)
   A  D
0  1  p
1  1  q
2  1  q
3  2  p
4  2  p
5  2  q

或者:

df_temp = (df.melt(id_vars='A',value_vars=['B','C'], value_name='D')
             .drop('variable', axis=1)
             .dropna(subset=['D'])
             .sort_values('A', ignore_index=False))
print (df_temp)
   A  D
0  1  p
4  1  q
5  1  q
2  2  p
3  2  p
7  2  q