Pandas:按两个参数分组并按第三个参数排序

Posted

技术标签:

【中文标题】Pandas:按两个参数分组并按第三个参数排序【英文标题】:Pandas: Group by two parameters and sort by third parameter 【发布时间】:2020-02-17 18:28:57 【问题描述】:

我想按两列(名称和预算)对我的数据框进行分组,然后按第三个参数(Prio)对聚合结果进行排序。

Name     Budget    Prio    Quantity
peter    A         2       12
         B         1       123
joe      A         3       34
         B         1       51
         C         2       43

我已经检查了这个post,它非常有帮助并导致以下输出。但是,我无法通过第三个参数 (Prio) 管理排序。

df_agg = df.groupby(['Name','Budget','Prio']).agg('Quantity':sum)

g = df_agg['Quantity'].groupby(level=0, group_keys=False)

res = g.apply(lambda x: x.sort_values(ascending=True))

我现在想在每个组中按升序对 prio 进行排序。得到类似的东西:

Name     Budget    Prio    Quantity
peter    B         1       123
         A         2       12
joe      B         1       51
         C         2       34
         A         3       43

【问题讨论】:

【参考方案1】:

如果你只想按Prio排序,你可以使用sort_index

(df.groupby(['Name','Budget','Prio'])
   .agg('Quantity':'sum')
   .sort_index(level=['Name', 'Prio'],
                ascending=[False, True])
)

输出:

                   Quantity
Name  Budget Prio          
peter B      1          123
      A      2           12
joe   B      1           51
      C      2           43
      A      3           34

【讨论】:

【参考方案2】:

IIUC,

df.groupby(['Name','Budget','Prio']).agg('Quantity':sum).sort_values(['Name','Prio'])

输出:

                   Quantity
Name  Budget Prio          
joe   B      1           51
      C      2            4
      A      3           34
peter B      1          123
      A      2           12

【讨论】:

谢谢,这真的很有帮助!完成后,有没有办法遍历行并访问特定值? @maxiw46 是的,您可以使用元组访问特定值。 df_out.loc[('joe','A',3), 'Quantity'] 返回 34。

以上是关于Pandas:按两个参数分组并按第三个参数排序的主要内容,如果未能解决你的问题,请参考以下文章

使用宇宙飞船运算符按两个参数对数组进行排序[重复]

如何基于 ManyToManyField 内部连接表并按参数分组并在 Django 中获取最新的表?

Python Pandas:按日期分组,并按时间戳访问每个组

按两个参数对字典列表进行分组并计算分组值

pandas基础(part4)--排序/分组/合并

Python Pandas 按邮政编码堆叠并按月/年分组