您可以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
是dict
然后当你调用keys
组顺序是不维护:
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')}
然后键顺序保持,解决此一劈是访问.name
属性各组:
In [78]:
gp.apply(lambda x: x.name)
Out[78]:
group
a a
b b
e e
g g
x x
dtype: object
whic h不是很好,因为这不是矢量化的,但是如果你已经有一个聚合对象,那么你可以得到索引值:
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')
Thanks for this。这个方法会保持和我循环一样的顺序吗?我只是想确保这会与我拥有的其他一些数据同步。 – Nate
感谢您的帮助! – Nate
'groups'将值作为组的索引 - 从这些索引获取实际列值的快速内置方法? –