2013-11-21 6 views
9

パンダのデータフレームに格納し、我々はこの単純な表から開始したとしますパンダの.groupbyとは逆の "ungroup by"操作がありますか?

def name_join(list_names, concat='-'): 
    return concat.join(list_names) 

name age family 
0 john 1  1 
1 jason 36  1 
2 jane 32  1 
3 jack 26  2 
4 james 30  2 

その後、私はname_joinは、名前のための簡単な集約関数である

group_df = df.groupby('family') 
group_df = group_df.aggregate({'name': name_join, 'age': pd.np.mean}) 

を行います

出力は:

 age    name 
family      
1  23 john-jason-jane 
2  28  jack-james 

今質問です。

集計された表から次の項目に素早く効率的にアクセスできますか?

name age family 
0 john 23  1 
1 jason 23  1 
2 jane 23  1 
3 jack 28  2 
4 james 28  2 

(注:数値は単なる一例であり、私はこの特定の例では平均化した後、私は失っていた情報のために気にしない)

私はそれがあまりにも効率的に見えない何ができると思った道:

  1. は、できるだけ多くの行でデータフレームを返す分離、group_df内のすべての行から空のデータフレーム
  2. を作成開始行
  3. 内の名前が空のデータフレーム
+0

[pandas:列内のテキストを複数の列に分割するにはどうすればいいですか?](http://stackoverflow.com/questions/17116814/pandas-how-do-i-split-text-in-a複数の列に列) –

答えて

8

に出力が追加されているように、GROUPBYの「反対」などの操作を考えると便利ではないかもしれません。

文字列を分割し、それぞれの関連を「家族」と維持しています。 This old answer of mineジョブを実行します。

最初にインデックス列として「ファミリ」を設定してから、上記のリンクを参照し、最後にreset_index()を入力して目的の結果を得てください。

+0

素晴らしい!私はまだ適用、ラムダ、pd.Seriesとスタックの組み合わせが何を見ているのか、それは意図したとおりに正確に動作します。ありがとう! – mkln