使用熊猫使用键标识符转置多列

时间:2018-11-28 16:13:14

标签: python pandas transpose

我需要将多列转换为一列,并以一个已经存在的列作为键标识符。我更愿意使用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

2 个答案:

答案 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'