Python多索引函数,在拆分列中保留订单或其他可能的解决方案

时间:2017-12-02 15:45:41

标签: python pandas multi-index melt

我有以下格式的数据集:

county   area    pop_2006    pop_2007    life_2006    life_2007
01001    275      1037         1052         102          121
01003    394      2399         2424         438          221
01005    312      1638         1647         660          221

我需要这样的格式:

county    year   area      pop    life
01001     2006   275      1037     102
01001     2007   275      1052     121
01003     2006   394      2399     438
01003     2007   394      2424     221
01005     2006   312      1638     660
01005     2007   312      1647     221

我尝试了MultiIndex,但它会生成按字典顺序排列的列。 (显然,我在Python / Pandas中大部分都是文盲,所以请保持温和。)

1 个答案:

答案 0 :(得分:1)

你可以使用wide_to_long,这与在R中使用tidyr非常相似。

import pandas as pd
dat = pd.DataFrame(data={"county": ["01001", "01003", "01005"], 
                         "area": [275, 394, 312],
                         "pop_2006": [1037, 2399, 1638],
                         "pop_2007": [1052, 2424, 1647],
                         "life_2006": [102, 438, 660],
                         "life_2007": [121, 221, 221]})
pd.wide_to_long(dat,['life','pop'],i=['county','area'],j='yea‌​r',sep='_').reset_index(drop=False)


Out[27]: 
  county  area yea‌​r  life   pop
0  01001   275   2006   102  1037
1  01001   275   2007   121  1052
2  01003   394   2006   438  2399
3  01003   394   2007   221  2424
4  01005   312   2006   660  1638
5  01005   312   2007   221  1647