python - 引用 groupby 结果的聚合列

标签 python pandas indexing summary

我有一个像这样的数据框:

testdf

  category  item  inventory  sold
0        A   Low        100    50
1        A  High        200    75
2        A   Med        130    20
3        A  Misc        435   150
4        A  High        130    65
5        A  Misc        120    88    
6        B  Misc        321   230    
7        B  High        453   450
8        B   Low        321   301
9        B   Low        122    80

我根据类别和项目对其进行分组

dfindx = testdf.groupby(['category','item']).agg({'inventory':['count','sum']})

dfindx

              inventory     
                  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

现在在聚合索引表时我遇到了这个错误:

dfindx.groupby(['category'])[['count']].sum()

KeyError: "Columns not found: 'count'"

dfindx.columns 

MultiIndex(levels=[['inventory'], ['count', 'sum']],
           labels=[[0, 0], [0, 1]])

我无法正确引用计数和总和来总结分组表。

dfindx.groupby(['category'])[inventory['count']].sum()

NameError: name 'inventory' is not defined

dfindx.groupby(['category'])[['inventory']['count']].sum()

TypeError: list indices must be integers or slices, not str

最佳答案

我认为您可以通过 list 与列 inventory 聚合来简化第一次聚合:

dfindx = testdf.groupby(['category','item'])['inventory'].agg(['count','sum'])
print (dfindx)
               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

然后下一个聚合工作得很好:

print(dfindx.groupby(['category'])[['count']].sum())
          count
category       
A             6
B             4

但是,如果想将代码与 MultiIndex 输出一起使用,请在下一个聚合中使用元组进行选择:

dfindx = testdf.groupby(['category','item']).agg({'inventory':['count','sum']})
print (dfindx)
              inventory     
                  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

print(dfindx.groupby(['category'])[[('inventory','count')]].sum())
         inventory
             count
category          
A                6
B                4

关于python - 引用 groupby 结果的聚合列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49548364/

相关文章:

python - 从其他用户的 YouTube 直播中抓取聊天内容

python - 在 pandas DataFrame 中查找字符串值的索引

python - 如何离散化 pandas DataFrame 中的值并转换为二进制矩阵?

python - 如何在 python 中流入和操作大数据文件

python - 获取 Pandas 数据框中选定值的行和列标签

python - 如何将 Vector 拆分为列 - 使用 PySpark

python - Flask - 如何在同一页上打印不同的变量

Python:根据列与列表连接列

java - 为什么我的短语查询给我的结果这么少?

java - 将属性添加到节点时,Neo4j 数据库会因 Lucene 日志而爆炸