问题描述
import pandas as pd
df = pd.DataFrame({"A": [1,3,7,10],"B": [2,5,8,11],"C": list("WXYZ") })
print(df)
>>> A B C
>>>0 1 2 W
>>>1 3 5 X
>>>2 7 8 Y
>>>3 10 11 Z
我现在想合并两列A
和B
作为索引,保留C
,并创建一个新列vals
代表前{{1} }} 和 A
列:
B
我尝试了 vals C
1 A W
2 B W
3 A X
5 B X
7 A Y
8 B Y
10 A Z
11 B Z
、stack
、pivot
的多个版本,但都没有成功。我可以一瘸一拐地通过终点线:
melt
这不仅看起来很糟糕,而且还有几个缺点(dtype 更改等)。我敢打赌有一个更好的 Pandas 解决方案来解决这个问题。
解决方法
确实是melt
:
df.melt('C').set_index('value')
输出:
C variable
value
1 W A
3 X A
7 Y A
10 Z A
2 W B
5 X B
8 Y B
11 Z B