Pandas Melt with Multiple Value Vars

后端 未结 3 1650
南笙
南笙 2020-12-30 14:52

I have a data set which is in wide format like this

   Index Country     Variable 2000 2001 2002 2003 2004 2005
   0     Argentina   var1     12   15   18            


        
3条回答
  •  星月不相逢
    2020-12-30 15:20

    numpy

    years = df.drop(['Country', 'Variable'], 1)
    y = years.values
    m = y.shape[1]
    c = df.Country.values
    v = df.Variable.values
    
    f0, u0 = pd.factorize(df.Country.values)
    f1, u1 = pd.factorize(df.Variable.values)
    
    w = np.empty((u1.size, u0.size, m), dtype=y.dtype)
    w[f1, f0] = y
    
    results = pd.DataFrame(dict(
            Country=u0.repeat(m),
            Year=np.tile(years.columns.values, u0.size),
        )).join(pd.DataFrame(w.reshape(-1, m * u1.size).T, columns=u1))
    
    results
    
          Country  Year  var1  var2
    0   Argentina  2000    12     1
    1   Argentina  2001    15     3
    2   Argentina  2002    18     2
    3   Argentina  2003    17     5
    4   Argentina  2004    23     7
    5   Argentina  2005    29     5
    6      Brazil  2000    20     0
    7      Brazil  2001    23     1
    8      Brazil  2002    25     2
    9      Brazil  2003    29     2
    10     Brazil  2004    31     3
    11     Brazil  2005    32     3
    

提交回复
热议问题