首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MultiIndex GroupBy聚合时设置GroupBy

使用MultiIndex GroupBy聚合时设置GroupBy
EN

Stack Overflow用户
提问于 2019-06-11 14:59:54
回答 1查看 51关注 0票数 2

一些摘录要求在应用聚合函数时向df列“添加次要名称”。

提供如下DF:

代码语言:javascript
复制
stype = ['s1','s1','s1','s1',
    's2','s2','s2','s2']
dtype = ['d1','d1','d2','d2',
        'd1','d1','d2','d2']
qty = [2, 1.4, 7, 3, 
        4, 1, 2.0, 3]
df = pd.DataFrame({'s_type':stype,
                    'd_type':dtype,
                    'qty':qty})

当按前2列分组并应用这样的agg函数时

代码语言:javascript
复制
new_df=df.groupby(['s_type','d_type'],sort =  False).agg({'qty':'median'})

和打印(New_df)

我得到了这个输出,注意到qty向上移动了一行(我假设这是正常行为),因为这是应用agg函数的一个列。

代码语言:javascript
复制
               qty
s_type d_type     
s1     d1      1.7
       d2      5.0
s2     d1      2.5
       d2      2.5

问题是会不会

可以在qty标签/名称下使用setc辅助列名吗?可以获得如下输出:

代码语言:javascript
复制
               qty
s_type d_type  Median   
s1     d1      1.7
       d2      5.0
s2     d1      2.5
       d2      2.5

此外,为什么qty向上移动1线?(我正在使用Spyder,我也在Anaconda/python控制台上看到了这种情况,不确定它是类似于某个功能还是熊猫的正常行为)。

One Last:--如果您需要使用sort_values,则必须为您添加一个辅助索引/名称的列使用元组,在应用聚合函数时也是如此(参见答案)

代码语言:javascript
复制
new_df=new_df.sort_values([('qty','MEDIAN')])

因此,您可以根据应用agg函数的列和添加索引的列对DF进行排序。

代码语言:javascript
复制
                 qty
              MEDIAN
s_type d_type       
s1     d1        1.7
s2     d1        2.5
       d2        2.5
s1     d2        5.0

python v3.6

大熊猫v0.23

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-11 15:01:24

超级简单。将“中位数”作为agg中的列表传递

代码语言:javascript
复制
result = df.groupby(['s_type','d_type'], sort=False).agg({'qty': ['median']})
result
                 qty
              median
s_type d_type       
s1     d1        1.7
       d2        5.0
s2     d1        2.5
       d2        2.5

至于“为什么qty向上移动1行”,这意味着前两列实际上是输出中的索引。查询result.index将使其变得显而易见:

代码语言:javascript
复制
result.index

MultiIndex(levels=[['s1', 's2'], ['d1', 'd2']],
           codes=[[0, 0, 1, 1], [0, 1, 0, 1]],
           names=['s_type', 'd_type'])

您可以在调用groupby时指定as_index=False

代码语言:javascript
复制
df.groupby(['s_type','d_type'], sort=False, as_index=False).agg({'qty': ['median']})

  s_type d_type    qty
                median
0     s1     d1    1.7
1     s1     d2    5.0
2     s2     d1    2.5
3     s2     d2    2.5

因此,石斑鱼在输出中保留列。

可以通过将元组列表传递给agg来更改输出中的名称。

代码语言:javascript
复制
df.groupby(['s_type','d_type'], sort=False).agg(
    {'qty': [('MEDIAN', 'median')]}
)

                 qty
              MEDIAN
s_type d_type       
s1     d1        1.7
       d2        5.0
s2     d1        2.5
       d2        2.5
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56546585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档