我需要将多列转换为一列,并以一个已经存在的列作为键标识符。我更愿意使用pandas来做到这一点,但是普通的python也可以。
手头上的桌子看起来像这样
ID Col1 Col2 Col3
01 'a' 'b' 'c'
02 'a' 'b' 'c'
03 'a' 'b' 'c'
所需的结果应如下所示:
ID Col1
01 'a'
01 'b'
01 'c'
02 'a'
02 'b'
02 'c'
03 'a'
03 'b'
03 'c'
感谢大家<3
答案 0 :(得分:1)
您可以简单地堆叠数据框并重命名系列
df.set_index('ID').stack().reset_index(level=1,drop=True).rename('Col1').reset_index()
退出:
ID Col1
0 1 'a'
1 1 'b'
2 1 'c'
3 2 'a'
4 2 'b'
5 2 'c'
6 3 'a'
7 3 'b'
8 3 'c'
答案 1 :(得分:0)
melt
+ sort_values
这是一种方式。仅当行顺序相关时才需要排序。
res = pd.melt(df, id_vars='ID', value_name=df.columns[1])\
.drop('variable', 1).sort_values('ID').reset_index(drop=True)
print(res)
ID Col1
0 1 'a'
1 1 'b'
2 1 'c'
3 2 'a'
4 2 'b'
5 2 'c'
6 3 'a'
7 3 'b'
8 3 'c'