如何从Pandas GroupBy对象中获取分组列的名称?
获取Pandas GroupBy对象的分组列名
刚好你问到点子上了——Pandas的GroupBy对象本身就有直接的属性可以获取分组列名,完全不用绕到first()的索引里去取,两种常用属性都能搞定:
1. 最简洁的方式:groupby_obj.keys
不管是单列分组还是多列分组,这个属性都会直接返回分组列名的列表:
单列分组示例
import pandas as pd df = pd.DataFrame(dict(Foo=['A', 'A', 'B', 'B'], Bar=[1, 2, 3, 4])) g = df.groupby('Foo') print(g.keys) # 输出:['Foo']
多列分组示例
df = pd.DataFrame(dict(Foo=['A', 'A', 'B', 'B'], Baz=['C', 'D', 'C', 'D'], Bar=[1, 2, 3, 4])) g = df.groupby(['Foo', 'Baz']) print(g.keys) # 输出:['Foo', 'Baz']
2. 另一种方式:groupby_obj.grouper.names
grouper是GroupBy内部负责分组逻辑的对象,它的names属性同样能返回分组列名列表,结果和keys完全一致:
print(g.grouper.names) # 输出:['Foo', 'Baz']
结合你的绘图需求
如果要给每个分面标注分组列名+标签,直接用这两个属性就能轻松实现,比如:
for group_label, group_df in g: # 把分组列名用逗号拼接,再加上分组标签 plot_title = f"{', '.join(g.keys)}: {group_label}" group_df.plot(kind='line', y='Bar', title=plot_title)
这样就不用再依赖索引的name或names属性,直接从GroupBy对象本身获取核心信息,逻辑更清晰,也避免了多列分组时索引返回None的问题。
内容的提问来源于stack exchange,提问作者bwk
相关产品推荐
相关产品推荐

