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。
在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。