转置和扩大数据

时间:2018-03-22 08:27:23

标签: python pandas dataframe transpose

我的熊猫数据框如下所示:

if(res.status == "success") {
    var itemloop = res.response.activities;
    var social_post_link = [];
    for(var i=0; i<itemloop.length; i++){
        if(itemloop[i].activity_attributes[0].attribute_name == "position") {
            social_post_link.push(itemloop[i].activity_attributes);
        }
    }
    console.log(social_post_link);
}

如何将其转置为如下所示?

Country Code  1960  1961  1962  1963  1964  1965  1966  1967  1968  ... 2015
ABW  2.615300  2.734390  2.678430  2.929920  2.963250  3.060540 ...  4.349760
AFG  0.249760  0.218480  0.210840  0.217240  0.211410  0.209910 ...  0.671330  
ALB  NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN   NaN  ... 1.12214
...

感谢。

1 个答案:

答案 0 :(得分:3)

我认为melt需要sort_values

df = (df.melt(['Country Code'], var_name='Year', value_name='Econometric_Metric')
        .sort_values(['Country Code','Year'])
        .reset_index(drop=True))

set_indexstack

df = (df.set_index(['Country Code'])
        .stack(dropna=False)
        .reset_index(name='Econometric_Metric')
        .rename(columns={'level_1':'Year'}))
print (df.head(10))
  Country Code  Year  Econometric_Metric
0          ABW  1960             2.61530
1          ABW  1961             2.73439
2          ABW  1962             2.67843
3          ABW  1963             2.92992
4          ABW  1964             2.96325
5          ABW  1965             3.06054
6          ABW  1966                 NaN
7          ABW  1967                 NaN
8          ABW  1968                 NaN
9          ABW  2015             4.34976