python - 从 Pandas 中的 GroupBy 对象中获取所有键

标签 python pandas

我正在寻找一种方法来获取 GroupBy 对象中所有键的列表,但我似乎无法通过文档或 Google 找到一个。

肯定有一种方法可以通过它们的 key 访问组,如下所示:

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

...所以我认为有一种方法可以访问 GroupBy 对象中的键列表(或类似列表)。我正在寻找这样的东西:

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

我想我可以遍历 GroupBy 对象并以这种方式获取 key ,但我认为必须有更好的方法。

最佳答案

您可以通过 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

这不是很好,因为这不是矢量化的,但是如果您已经有一个聚合对象,那么您可以获取索引值:

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')

关于python - 从 Pandas 中的 GroupBy 对象中获取所有键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42513049/

相关文章:

python - 有没有办法使用 Pandas 删除一行、更改文件、删除下一行、更改文件等等?

pandas - 移动 MultiIndex 时间序列的最有效方法

python - Discord.py 打印邀请链接

python - float() 参数必须是字符串或数字,而不是 'Timestamp'

Python pandas 按多个索引范围切片数据框

python - 我们可以限制APScheduler只运行100次吗?

python - 从 DataFrame 中的每个值中减去

python - Pandas 重置 MultiIndex 的内部级别

python - 是否有 Google Insights API?

python - 正则表达式: Removing this [##### : #####] from a string