3

次の列を含むデータセット (.tsv ファイル) があります。(これは世界銀行の新しい WDI all-in all-time single-download datasetです。いいね!)

country countrycode varname 1960 1961 1962
afghanistan AFG GDP 5.6 5.7 5.8
afghanistan AFG Gini .77 .78 .75
afghanistan AFG educ 8.1 8.2 8.3
afghanistan AFG pop 888 889 890
albania ALB GDP 6.6 6.7 6.8
albania ALB Gini .45 .46 .47
albania ALB educ 6.2 6.3 6.4
albania ALB pop 777 778 779

['GDP','Gini','edu','pop'] 列と ['country', 'countrycode', 'year'] を含む pandas DataFrame が必要です。したがって、「年」の値は現在列です。そして、国と年の組み合わせごとに 1 つの行だけが必要です。

たとえば、列と最初の行は次のようになります。

country countrycode year GDP Gini educ pop
afghanistan AFG 1960 5.6 .77 8.1 888

これは、複雑なピボットまたは「溶解」の反対のように思えますが、私には理解できません。

4

3 に答える 3

4
In [59]: df
Out[59]:
       country countrycode varname    1960    1961    1962
0  afghanistan         AFG     GDP    5.60    5.70    5.80
1  afghanistan         AFG    Gini    0.77    0.78    0.75
2  afghanistan         AFG    educ    8.10    8.20    8.30
3  afghanistan         AFG     pop  888.00  889.00  890.00
4      albania         ALB     GDP    6.60    6.70    6.80
5      albania         ALB    Gini    0.45    0.46    0.47
6      albania         ALB    educ    6.20    6.30    6.40
7      albania         ALB     pop  777.00  778.00  779.00

In [60]: df = df.set_index(['country', 'countrycode', 'varname'])

In [61]: df.columns.name = 'year'

In [62]: df.stack().unstack('varname')
Out[62]:
varname                       GDP  Gini  educ  pop
country     countrycode year
afghanistan AFG         1960  5.6  0.77   8.1  888
                        1961  5.7  0.78   8.2  889
                        1962  5.8  0.75   8.3  890
albania     ALB         1960  6.6  0.45   6.2  777
                        1961  6.7  0.46   6.3  778
                        1962  6.8  0.47   6.4  779

後者は MutliIndex を持つフレームです。reset_index を実行して、MultiIndex を通常の列に移動できます。

于 2013-05-03T10:04:18.627 に答える