合并两个pandas列作为索引,创建新列,列名作为值

问题描述

我有一个 df:

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

我现在想合并两列AB作为索引,保留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 stackpivot 的多个版本,但都没有成功。我可以一瘸一拐地通过终点线:

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