如何引用DataFrame GroupBy聚合结果中的聚合列?
如何引用Pandas多层列索引的聚合结果
首先,你通过groupby+agg得到的dfindx是一个带有**多层列索引(MultiIndex)**的DataFrame,外层列是inventory,内层是聚合后的count和sum。下面几种方法可以帮你灵活引用这些聚合列:
1. 引用整个聚合组的所有列
如果你想获取inventory下的全部聚合结果(count和sum两列),直接用外层列名索引即可:
# 返回一个包含count和sum列的DataFrame inventory_all = dfindx['inventory']
输出的inventory_all结构如下:
count sum category item A High 2 330 Low 1 100 Med 1 130 Misc 2 555 B High 1 453 Low 2 443 Misc 1 321
2. 引用单个聚合列
要单独取某一个聚合指标(比如count或sum),需要用元组来指定多层列的路径:
# 获取inventory下的count列,返回Series count_series = dfindx[('inventory', 'count')] # 如果想保留DataFrame格式,用双层中括号 count_df = dfindx[[('inventory', 'count')]]
举个例子,count_series的输出是:
category item A High 2 Low 1 Med 1 Misc 2 B High 1 Low 2 Misc 1 Name: (inventory, count), dtype: int64
3. 结合行索引精准取值
如果需要定位到某一行的特定聚合值,比如取category=A, item=High的sum值,可以用loc配合元组索引:
# 精准获取单个值 target_value = dfindx.loc[('A', 'High'), ('inventory', 'sum')] # 输出:330
或者先定位行,再取列:
target_value = dfindx.loc[('A', 'High')]['inventory']['sum']
4. 可选:将多层列转为单层(更直观)
如果你觉得多层列索引使用起来麻烦,可以把列名合并成单层,方便后续直接引用:
# 合并多层列名,用下划线连接 dfindx.columns = ['_'.join(col) for col in dfindx.columns]
处理后dfindx的列名会变成inventory_count和inventory_sum,之后直接用普通索引即可:
# 直接引用单层列名 count_col = dfindx['inventory_count'] sum_col = dfindx['inventory_sum']
内容的提问来源于stack exchange,提问作者SankMa
相关产品推荐
相关产品推荐

