python - 列の1つに長い系列を含むパンダのデータフレームを処理するにはどうすればよいですか?

原文 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'])


dfiPythonをレンダリングすると、次のようになります。

    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の部分は省略してください)。

もう1つの望ましいビューは、fooを構成するシリーズを分割することです。つまり、上記の例では、系列のインデックスと値を保持する(fooの列ではなく)6つの列があります。
答え
そんな感じ ?:

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

python - RabbitMQは接続をセットアップするのにこれだけ長い時間をかけるべきですか?

python - python pandas-引数をローリングする場合のsumf

python - ロギングライブラリの使用方法(Pythonでのロギングの実装)

python - Tkinterで文字を画像にマッピングする

python - p4pythonを使用してSSL対応のPERFORCEサーバーに接続できません

python - 関数に渡されたパラメーター値を文字列として取得する方法

python - Python、複数行の記述

python - CygwinバッチからPythonスクリプトを自動実行する

python - ラムダ関数を含むpython3フィルターオブジェクト

python - numpy配列をハッシュする最も効率的なプロパティ