Python 熊猫将第二列堆叠在第一列下方,反之亦然

Python 熊猫将第二列堆叠在第一列下方,反之亦然,python,pandas,Python,Pandas,我有一个包含两列的数据框架,我想将第二列堆叠在第一列的下面,第一列堆叠在第二列的下面 pd.DataFrame({'A':[1,2,3], 'B': [4,5,6]}) A B 0 1 4 1 2 5 2 3 6 期望输出: A B 0 1 4 1 2 5 2 3 6 3 4 1 4 5 2 5 6 3 到目前为止,我已经尝试: pd.concat([df, df[['B','A']].rename(columns={'A':'B',

我有一个包含两列的数据框架,我想将第二列堆叠在第一列的下面,第一列堆叠在第二列的下面

pd.DataFrame({'A':[1,2,3], 'B': [4,5,6]})

   A  B
0  1  4
1  2  5
2  3  6
期望输出:

   A  B
0  1  4
1  2  5
2  3  6
3  4  1 
4  5  2
5  6  3
到目前为止,我已经尝试:

pd.concat([df, df[['B','A']].rename(columns={'A':'B', 'B':'A'})])

   A  B
0  1  4
1  2  5
2  3  6
3  4  1
4  5  2
5  6  3

这是最干净的方式吗?如果你问我的话,康卡特更好。但是如果你有100列,重命名是一件痛苦的事。作为一种通用方法,这里有一种使用
numpy flip
vstack
的方法,即

v = df.values
pd.DataFrame(pd.np.vstack((v, pd.np.fliplr(v))), columns=df.columns)

   A  B
0  1  4
1  2  5
2  3  6
3  4  1
4  5  2
5  6  3

康卡特怎么了。你告诉我很整洁!我不是熊猫专家,所以我在问:)是的,看起来不错me@Imran我想知道你为什么对你所拥有的不满意。这里的清洁度取决于你拥有的色谱柱的数量。如果您有100个列,那么下面建议的解决方案就是干净的解决方案之一。使用
fliplr
从左向右翻转,只创建一个二维数组一次(做两次效率很低)。@cᴏʟᴅsᴘᴇᴇᴅ 我们只是用df.values访问数据,对吗?我认为数组不是被创建的,而是刚刚被访问的,这是错误的吗?我认为这要看情况而定。在某些情况下,返回一个视图,而在另一些情况下,它是一个新数组。我想最好是安全的。