2016-09-17 85 views
1

我有这样分裂堆叠数据帧

  age sex  values 
time       
2015  10 F 589628.0 
2015  10 M 458390.0 
2015  11 F 108018.0 
2015  11 M 764350.0 
.... 
2000  60 M  34676.0 
2000  60 F  45488.0 

一个数据帧我想像

  age F   M 
time       
2015  10 589628.0 458390.0  
2015  11 
.... 
2000  60 45488.0 34676.0 

减少一半的行和添加一列创建数据帧。我试图用pivot来做到这一点,但无济于事。

df.pivot(columns='sex', values='values') 

但这返回

Index contains duplicate entries, cannot reshape 

任何想法如何,我可以清晰地拆分数据帧,而无需编写一个繁琐的功能,做到这一点?

干杯,迈克

回答

3

我无法证实这一点,但它应该是

df.set_index(['age', 'sex'], append=True)['values'].unstack().reset_index('age') 
+0

我觉得这是更快的。 – jezrael

1

使用pivot_tablereset_index

In [17]: df 
Out[17]: 
     age sex values 
time     
2015 10 F 589628.0 
2015 10 M 458390.0 
2015 11 F 108018.0 
2015 11 M 764350.0 

In [18]: newdf = df.reset_index().pivot_table('values', ['time', 'age'], 'sex').reset_index() 

In [19]: newdf.columns.name = None 

In [20]: newdf = newdf.set_index(['time']) 

In [21]: newdf 
Out[21]: 
     age   F   M 
time       
2015 10 589628.0 458390.0 
2015 11 108018.0 764350.0