2017-02-18 46 views
1

我有一个看起来像这样的CSV数据:如何根据熊猫年份重塑数据?

Before reshaping

在使用python熊猫,我想将其转换成类似这样:

After reshaping

的一点是要有每年的相同列变量,其中year是索引。

我已经尝试过很多不同形式的转换手头的dataframe,如数据透视表,熔化,堆栈/叠加等,但无济于事。任何在这方面的帮助将不胜感激!

+0

什么是'df.info()'? – jezrael

+0

究竟在哪里? –

+0

如果解决方案有效,则不需要。 ;) – jezrael

回答

1

IIUC你需要:

df = df.stack(0) 

样品:

mux = pd.MultiIndex.from_product([[2003,2004], ['C', 'D']]) 
mux1 = pd.MultiIndex.from_product([[1,2], ['A', 'B']], names=('State1','State2')) 

np.random.seed(100) 
df = pd.DataFrame(np.random.random((4,4)), columns=mux, index = mux1) 
print (df) 
        2003    2004   
         C   D   C   D 
State1 State2           
1  A  0.543405 0.278369 0.424518 0.844776 
     B  0.004719 0.121569 0.670749 0.825853 
2  A  0.136707 0.575093 0.891322 0.209202 
     B  0.185328 0.108377 0.219697 0.978624 

print (df.stack(0).swaplevel(1,2).reset_index()) 
    State1 level_1 State2   C   D 
0  1  2003  A 0.543405 0.278369 
1  1  2004  A 0.424518 0.844776 
2  1  2003  B 0.004719 0.121569 
3  1  2004  B 0.670749 0.825853 
4  2  2003  A 0.136707 0.575093 
5  2  2004  A 0.891322 0.209202 
6  2  2003  B 0.185328 0.108377 
7  2  2004  B 0.219697 0.978624 
+0

非常感谢!这非常有帮助 –