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 中获取最新的表?