Python 将多个列值转换为单个列

Python convert multiple column values into a single column

在Python中如何将下面的table结构转换成行

ID   Manager1    Manager2    Manager3
1    S394[1]       G490[2]     3004[3]
2    3905[1]       4003[2]     5003[3]

预期输出

    ID   Manager
    1    S394[1]
    1    G490[2]
    1    3004[3]
    2    3905[1] 
    2    4003[2] 
    2    5003[3]

我尝试使用 transpose()pivot()。两个选项都不起作用

df.pivot(index='SOEID',columns=['Manager1','Manager2','Manager3'])

我也试过 pd.melt() 我收到一条错误消息说索引只有 1 级而不是 2 级。

df.melt(id_vars='SOEID', var_name=['Manager1','Manager2','Manager3'])

问题是您需要 value_vars 来获取 DataFrame.melt 中的列名列表:

df1 = (df.melt(id_vars='ID', 
             value_vars=['Manager1','Manager2','Manager3'], 
             value_name='Manager', 
             var_name='tmp').drop('tmp', axis=1).sort_values('ID'))
 

print (df1)
   ID  Manager
0   1  S394[1]
2   1  G490[2]
4   1  3004[3]
1   2  3905[1]
3   2  4003[2]
5   2  5003[3]

DataFrame.stack 的替代解决方案:

df2 = (df.set_index('ID')[['Manager1','Manager2','Manager3']]
         .stack()
         .reset_index(level=1, drop=True)
         .reset_index(name='Manager'))

print (df2)
   ID  Manager
0   1  S394[1]
1   1  G490[2]
2   1  3004[3]
3   2  3905[1]
4   2  4003[2]
5   2  5003[3]

你也可以使用 lreshape:

pd.lreshape(df, {'Manager': ['Manager1', 'Manager2','Manager3']}).sort_values('ID')

输出:

   ID  Manager
0   1  S394[1]
2   1  G490[2]
4   1  3004[3]
1   2  3905[1]
3   2  4003[2]
5   2  5003[3]

注意lreshape目前没有记录,有可能it might be removed