2016-08-10 17 views
3

私は、カラムの1つが辞書タイプであるパンダデータフレームを持っています。ネストされた辞書キーによるパンダデータフレームのグループ

import pandas as pd 
df = pd.DataFrame({'a': [1,2,3], 
        'b': [4,5,6], 
        'version': [{'major': 7, 'minor':1}, 
           {'major':8, 'minor': 5}, 
           {'major':7, 'minor':2}] }) 

DF:これは、例えば、データフレームである

a b     version 
0 1 4 {'minor': 1, 'major': 7} 
1 2 5 {'minor': 5, 'major': 8} 
2 3 6 {'minor': 2, 'major': 7} 

私はその辞書のキーのいずれかでグループ化する方法データフレームを探しています。この場合、dfデータフレームをメジャーキーでバージョンラベルにグループ化します。

辞書キーをdataframe groupby関数に渡してから、いくつか試してみましたが、のメジャーが動作しない `df.groupby(['version'] ['major']))データフレームラベルの一部にバージョンをデータフレームインデックスに割り当てますが、これまでのところ何も動作しません。私はまた、データフレーム自体の追加の列として辞書を平坦化しようとしていますが、これは独自の問題があるようです。

P.S.書式化して申し訳ありません、それは私の最初のstackoverflowの質問です。

答えて

3

オプション1

df.groupby(df.version.apply(lambda x: x['major'])).size() 

version 
7 2 
8 1 
dtype: int64 

df.groupby(df.version.apply(lambda x: x['major']))[['a', 'b']].sum() 

enter image description here

オプション2

df.groupby(df.version.apply(pd.Series).major).size() 

major 
7 2 
8 1 
dtype: int64 

df.groupby(df.version.apply(pd.Series).major)[['a', 'b']].sum() 

enter image description here

+0

私が好きなバージョン – MaxU

+0

素晴らしいです!私は、 'apply'関数がデータフレームのインデックスセレクタとして機能するとは思わなかった。ありがとう、@ piRSquared! – RexIncognito

2

あなたは、このようにそれを行うことができます。

In [15]: df.assign(major=df.version.apply(pd.Series).major).groupby('major').sum() 
Out[15]: 
     a b 
major 
7  4 10 
8  2 5 
+1

私は前に 'assign'を見たことがありません。私は今日何か新しいことを学んだ。 – piRSquared

+0

ええ、 'assign'は私に非常に多くの' concat'と 'merge'を保存してくれました。 – RexIncognito

関連する問題