2017-02-28 39 views
5

GroupByオブジェクト内のすべてのキーのリストを取得する方法を探していますが、ドキュメントやGoogleで見つけられないようです。そう私はキーのリスト(など)にアクセスする方法があります理解...PandasのGroupByオブジェクトからすべてのキーを取得

df_gb = df.groupby(['EmployeeNumber']) 
df_gb.get_group(key) 

は間違いなくそうのように、そのキーによってグループにアクセスする方法がありますGroupByオブジェクト。

df_gb.keys 
Out: [1234, 2356, 6894, 9492] 

私はGROUPBYオブジェクトを介してだけでループを可能性があり、そのようにキーを入手理解が、私はより良い方法があるように持っていると思う:私はこのような何かを探しています。

答えて

7

あなたは、これは辞書を返し、groupbyオブジェクトの属性.groupsを経由して、これをアクセスすることができ、辞書のキーはあなたのグループを与える:ここ

In [40]: 
df = pd.DataFrame({'group':[0,1,1,1,2,2,3,3,3], 'val':np.arange(9)}) 
gp = df.groupby('group') 
gp.groups.keys() 

Out[40]: 
dict_keys([0, 1, 2, 3]) 

groupsから出力されます:

In [41]: 
gp.groups 

Out[41]: 
{0: Int64Index([0], dtype='int64'), 
1: Int64Index([1, 2, 3], dtype='int64'), 
2: Int64Index([4, 5], dtype='int64'), 
3: Int64Index([6, 7, 8], dtype='int64')} 

更新

groupsのあなたがkeysを呼び出すときにそのグループの順序が維持されていないdict次のとおりです。

In [65]: 
df = pd.DataFrame({'group':list('bgaaabxeb'), 'val':np.arange(9)}) 
gp = df.groupby('group') 
gp.groups.keys() 

Out[65]: 
dict_keys(['b', 'e', 'g', 'a', 'x']) 

あなたはgroupsを呼び出す場合は、順序が維持されて見ることができます。

In [79]: 
gp.groups 

Out[79]: 
{'a': Int64Index([2, 3, 4], dtype='int64'), 
'b': Int64Index([0, 5, 8], dtype='int64'), 
'e': Int64Index([7], dtype='int64'), 
'g': Int64Index([1], dtype='int64'), 
'x': Int64Index([6], dtype='int64')} 

、キーの順序が維持されていますこの問題を回避するには、各グループの属性にアクセスすることです:

In [78]: 
gp.apply(lambda x: x.name) 

Out[78]: 
group 
a a 
b b 
e e 
g g 
x x 
dtype: object 

あなたが既に集約されたオブジェクトを持っている場合は、インデックス値を得ることができます:

In [81]: 
agg = gp.sum() 
agg 

Out[81]: 
     val 
group  
a  9 
b  13 
e  7 
g  1 
x  6 

In [83]:  
agg.index.get_level_values(0) 

Out[83]: 
Index(['a', 'b', 'e', 'g', 'x'], dtype='object', name='group') 
+0

ありがとうございます。この方法は、私がループしたのと同じ順序を保つだろうか?私はちょうどこれが私が持っている他のいくつかのデータと同期することを確認したい。 – Nate

+0

すべての助けてくれてありがとう! – Nate

+0

'groups'はグループのインデックスを値として持っています - それらのインデックスからの実際のカラム値を得るための高速組み込み方法? –

関連する問題