Python 从2个相似的列创建合并列和索引列

Python 从2个相似的列创建合并列和索引列,python,pandas,Python,Pandas,我有一个看起来像这样的数据帧:{“Val1”:[…],“Val2”:[…]} 我现在想要实现的是一个如下所示的数据帧: { "Vals": [<should contain all vals from Val1 and Val2>], "type": [<1 or 2 depending on the column from which the corresponding value originated>] } 但这感觉

我有一个看起来像这样的数据帧:
{“Val1”:[…],“Val2”:[…]}
我现在想要实现的是一个如下所示的数据帧:

{
    "Vals": [<should contain all vals from Val1 and Val2>], 
    "type": [<1 or 2 depending on the column from which 
              the corresponding value originated>]
}
但这感觉非常粗糙,我想知道是否有一个优雅的一行使用熊猫的方法。因为在我的实际问题中,表又多了4列,然后我的黑客解决方案变得非常密集

编辑: 一个具体的例子是:

old = pd.DataFrame({"A": [2, 4, 5], "B": [1, 2, 3], "C":[4, 5, 6]})
new = pd.DataFrame({"A": [2, 4, 5, 2, 4, 5], "B and C": [1, 2, 3, 4, 5, 6], "type": (["B"] * 3) + (["C"] * 3)})

old:

    A   B   C
0   2   1   4
1   4   2   5
2   5   3   6

new:
    A   B and C     type
0   2   1           B
1   4   2           B
2   5   3           B
3   2   4           C
4   4   5           C
5   5   6           C
假设你有:

df = pd.DataFrame({'val1':[1,2,3,4],'val2':[5,6,7,8]})
使用以下工具,您将得到您想要的:

df.melt(var_name='Type', value_name='vals')
      Type    vals
0     val1      1
1     val1      2
2     val1      3
3     val1      4
4     val2      5
5     val2      6
6     val2      7
7     val2      8

如果您可以与预期的输出共享一些示例输入,那就太好了。
df.melt(var_name='Type', value_name='vals')
      Type    vals
0     val1      1
1     val1      2
2     val1      3
3     val1      4
4     val2      5
5     val2      6
6     val2      7
7     val2      8
import pandas as pd
datadict = {
        'Val1': [1,3,5,7,9],
        'Val2': [2,4,6,8,10],
        }

df = pd.DataFrame(datadict)

df = pd.melt(df,var_name='Val')
print (df)  
    Val  value
0  Val1      1
1  Val1      3
2  Val1      5
3  Val1      7
4  Val1      9
5  Val2      2
6  Val2      4
7  Val2      6
8  Val2      8
9  Val2     10