假设我有一个包含多列的数据框。
a b c
1
2
3
如何将其转换为单列数据框
1 a
2 a
3 a
1 b
2 b
3 b
1 c
2 c
3 c
请注意,前者是Panel以外的Dataframe
答案 0 :(得分:6)
使用melt
:
df = df.reset_index().melt('index', var_name='col').set_index('index')[['col']]
print (df)
col
index
1 a
2 a
3 a
1 b
2 b
3 b
1 c
2 c
3 c
或numpy.repeat
和numpy.tile
与DataFrame
构造函数::
a = np.repeat(df.columns, len(df))
b = np.tile(df.index, len(df.columns))
df = pd.DataFrame(a, index=b, columns=['col'])
print (df)
col
1 a
2 a
3 a
1 b
2 b
3 b
1 c
2 c
3 c
答案 1 :(得分:2)
另一种方式是,
pd.DataFrame(list(itertools.product(df.index, df.columns.values))).set_index([0])
输出:
1
0
1 a
1 b
1 c
2 a
2 b
2 c
3 a
3 b
3 c
准确输出:
使用sort_values
print pd.DataFrame(list(itertools.product(df.index, df.columns.values))).set_index([0]).sort_values(by=[1])
1
0
1 a
2 a
3 a
1 b
2 b
3 b
1 c
2 c
3 c