如何在其中一列中处理包含长序列的pandas数据帧?

时间:2014-11-27 16:06:05

标签: python pandas ipython

考虑以下最小例子:

import numpy as np
import pandas as pd
data = {'year': [2010, 2011, 2012, 2011, 2012, 2010, 2011, 2012],
        'foo': [pd.Series(np.random.randn(3)*2) for x in xrange(8)]}
df = pd.DataFrame(data, columns=['year', 'foo'])

df中呈现iPython时,我会得到类似的内容:

    year    foo
0   2010    0 1.936300 1 0.460437 2 1.895832 dtyp...
1   2011    0 -1.639541 1 -0.460803 2 0.196103 dtyp...
2   2012    0 1.868190 1 -0.571973 2 0.029239 dtyp...
3   2011    0 -1.034721 1 -1.268487 2 0.719374 dtyp...
4   2012    0 1.249795 1 3.279158 2 -3.221805 dtyp...
5   2010    0 3.175814 1 -3.441948 2 -3.710086 dtyp...
6   2011    0 1.237284 1 -2.225327 2 2.923511 dtyp...
7   2012    0 -1.306018 1 -0.804952 2 -0.861195 dtyp...

我想要以下内容:

    year    foo
0   2010    0 1.936300 
            1 0.460437 
            2 1.895832
1   2011    0 -1.639541
            1 -0.460803 
            2 0.196103 
2   2012    0 1.868190 
            1 -0.571973 
            2 0.029239 
3   2011    0 -1.034721 
            1 -1.268487 
            2 0.719374 

特别是,foo列中的每个单元格都应显示相应系列中的所有值(并省略dtype部分)。

另一个想要的观点,也可能是有用的,是拆分构成foo的系列。换句话说,在上面的示例中,有六列(而不是foo的一列)将保存系列的索引和值。

1 个答案:

答案 0 :(得分:0)

类似的东西?:

s = df['foo'].apply(pd.Series, 1).stack()
s.index = s.index.droplevel()
s.name = 'foo'
del df['foo']
df = df.join(s)
df