我有一个像这样的数据框:
Adapter
df = pd.DataFrame({'a': range(3), 'b': np.arange(3)-1})
我发现了一种(hacky)的方法:
df_rearranged = pd.DataFrame({'data': [0,1,2,-1,0,1], 'origin': ['a', 'a', 'a', 'b', 'b', 'b']})
这可行,但是当我要合并更多列时,它很快变得不切实际。另外,我认为在pandas中应该有一个默认情况下可以执行此操作的函数,但是我缺少找到它的关键字。非常感谢您的帮助!
答案 0 :(得分:1)
将DataFrame.melt
与DataFrame.reindex
的变更单列一起使用:
df1 = df.melt(var_name='origin', value_name='data').reindex(['data','origin'], axis=1)
print (df1)
data origin
0 0 a
1 1 a
2 2 a
3 -1 b
4 0 b
5 1 b
使用带有numpy.ravel
和numpy.repeat
的DataFrame构造函数,显然可以提高性能:
df1 = pd.DataFrame({'data':df.values.ravel(), 'origin':np.repeat(df.columns, len(df))})
print (df1)
data origin
0 0 a
1 -1 a
2 1 a
3 0 b
4 2 b
5 1 b