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

时间:2018-12-14 09:24:36

标签: python pandas

我有一个看起来像这样的DataFrame:{"Val1": [...], "Val2": [...]} 我现在想要实现的是一个看起来像这样的DataFrame:

{
    "Vals": [<should contain all vals from Val1 and Val2>], 
    "type": [<1 or 2 depending on the column from which 
              the corresponding value originated>]
}

我可以通过例如:

new = DataFrame({"vals": old.vals1.values + old.vals2.values,
                 "type": ([1] * len(old)) + ([2] * len(old))})

但是,这感觉很棘手,我想知道是否有使用熊猫方法的优雅单线。因为在我的实际问题中,该表又增加了4列,所以我的hacky解决方案变得非常密集。

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

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

2 个答案:

答案 0 :(得分:2)

说你有

df = pd.DataFrame({'val1':[1,2,3,4],'val2':[5,6,7,8]})

使用pd.melt(),您将得到想要的东西:

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

答案 1 :(得分:1)

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