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