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

问题描述

在Python中如何将以下表结构转换为行

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','Manager3'])

解决方法

您也可以使用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

,

问题是您需要select Details from [Items] where CONTAINS((Details,Assignee),'"doxy*" AND "vive*"') 来获取DataFrame.melt中的列名称列表吗?

value_vars

带有DataFrame.stack的替代解决方案:

df1 = (df.melt(id_vars='ID',value_vars=['Manager1','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]