如何聚合熊猫中每组的两个最大值?

碧山宝德尔

我正在浏览此链接:使用熊猫返回每组前 N 个最大值

并找到了多种方法来查找每组的 topN 值。

但是,我更喜欢带有 agg 函数的字典方法,并且想知道是否有可能获得等效于以下问题的字典方法?

import numpy as np
import pandas as pd

df = pd.DataFrame({'A': [1,   1,   1,   2,   2],
                   'B': [1,   1,   2,   2,   1],
                   'C': [10,  20,  30,  40,  50],
                   'D': ['X', 'Y', 'X', 'Y', 'Y']})
print(df)
   A  B   C  D
0  1  1  10  X
1  1  1  20  Y
2  1  2  30  X
3  2  2  40  Y
4  2  1  50  Y

我可以做这个:

df1 = df.groupby(['A'])['C'].nlargest(2).droplevel(-1).reset_index()
print(df1)
   A   C
0  1  30
1  1  20
2  2  50
3  2  40

# also this
df1 = df.sort_values('C', ascending=False).groupby('A', sort=False).head(2)
print(df1)

# also this
df.set_index('C').groupby('A')['B'].nlargest(2).reset_index()

必需的

df.groupby('A',as_index=False).agg(
    {'C': lambda ser: ser.nlargest(2)  # something like this
    })

这里可以用字典吗?

瓦尔迪博

如果你想得到一个像A: 2 top values from C这样的字典,你可以运行:

df.groupby(['A'])['C'].apply(lambda x:
    x.nlargest(2).tolist()).to_dict()

对于您的 DataFrame,结果是:

{1: [30, 20], 2: [50, 40]}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在多层groupby中划分熊猫中两个单独的df列的最大值?

如何在熊猫数据框中找到两个索引之间的最大值

如何在MySQL中获取两个值的最大值?

如何在Postgres / SQL中获得两个整数的最小值/最大值?

如何获得 SQL Server 中两个值的最大值?

如何获得两个ZonedDateTime实例的最大值?

删除R中两个向量的最大值

R中两个相等的最大值

比较两个差异熊猫数据框上两列的值并返回最大值

从分组数据框中获取一列,每组中另一列的两个最大值具有一定差异

列表中两个切片的最小最大值/最大值

当对象为两个最大值时,显示数组中对象的最大值

如何类似地从两个键中求和最大值,对象 javascript

如何比较两个不同的列并突出显示每行中的最大值?

如何从满足 DAX 中两个或多个 IF 条件的列中找到最大值

如何使用理解过滤Erlang中两个列表的最大值?

如何从仅ID重叠的两个表中获取最大值?

如何从两个表中获取特定字段最大值的行

如何在Excel中查找两个日期之间的最大值

如何在sql中找出两个不同条件下字段的最大值

如何检查两个 SQL 表中是否有最大值?

如何从共享两个公共列的一组行中选择一列中具有最大值的熊猫行?

如何汇总一列中两个单独列的最小值和最大值

在Python(Pandas / Numpy)中。如何创建两个独立系列的最大值/最小值的列?

如何从两个列表中删除与单独列表的重复值相对应的非最大值的索引?

使用两个聚合函数-同一查询上的最小值和最大值

计算Less中两个值的最小值/最大值

计算bigquery中两列的聚合最大值

如何更改两列的最小值和最大值之间的两个随机数,从而在两列中更改空值?