Python 保序多索引函数或拆分列中其他可能的解决方案
Python Multi index function with order preserving or other possible solution in split columns
我有以下格式的数据集:
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 大多是文盲,所以请保持温和。)
您可以使用 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='year',sep='_').reset_index(drop=False)
Out[27]:
county area year 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
我有以下格式的数据集:
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 大多是文盲,所以请保持温和。)
您可以使用 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='year',sep='_').reset_index(drop=False)
Out[27]:
county area year 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