У меня есть набор данных в следующем формате:

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, поэтому, пожалуйста, будьте осторожны.)

2
Fan LUO 2 Дек 2017 в 18:45

1 ответ

Лучший ответ

Вы можете использовать wide_to_long, это действительно похоже на используя tidyr в R.

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
2
erocoar 2 Дек 2017 в 19:33