python - 长/宽数据到宽/长

标签 python pandas panel-data

我有一个如下所示的数据框:

import pandas as pd
d = {'decil': ['1. decil','1. decil','2. decil','2. decil','3. decil','3. decil'],
    'kommune': ['AA','BB','AA','BB','AA','BB'],'2010':[44,25,242,423,845,962],
    '2011':[64,26,239,620,862,862]}    
df = pd.DataFrame(data=d)

打印

decil      kommune  2010  2011
1. decil   AA       44    64
1. decil   BB       25    26
2. decil   AA      242   239
2. decil   BB      423   620
3. decil   AA      845   862
3. decil   BB      962   862

我想要的输出是这样的

 kommune  year  1. decil  2. decil  3. decil
 AA       2010        44       242       845
 AA       2011        64       239       862
 BB       2010        25       423       962
 BB       2011        25       620       862

也就是说,我正在寻找一种方法来将“decil”列从长格式更改为宽格式,同时将年份列从宽格式更改为长格式。我已经尝试过 pd.pivot_table、循环和 unstack,但没有任何运气。有什么聪明的方法吗?预先感谢您的帮助。

最佳答案

使用set_indexstackunstack :

df = (df.set_index(['decil','kommune'])
        .stack()
        .unstack(0)
        .reset_index()
        .rename_axis(None, axis=1))

print (df)
  kommune level_1  1. decil  2. decil  3. decil
0      AA    2010        44       242       845
1      AA    2011        64       239       862
2      BB    2010        25       423       962
3      BB    2011        26       620       862

关于python - 长/宽数据到宽/长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52534500/

相关文章:

python - 在数据框中添加缺失日期索引

python - Pandas `drop_duplicates` 不保留第一行

r - 无法安装面板包

python - Python 中的神经网络,不使用任何现成的库......即从第一原则开始......帮助!

python - 一种从 pandas 时间序列数据帧生成季节性数据帧的 'pythonic' 方法

python - 迭代创建 pandas DataFrame

python - 如何找到组中两个事件之间的时间差

python - 自定义网格单元编辑器。 ComboBox 小部件的不正确行为

R数据转化为面板数据

r - plm 或 lme4 用于面板数据的随机和固定效应模型