高级聚合 pandas python

advanced aggregation pandas python

如果我有一个简单的table,比如:

index   location     col1   col2    col3    col4
    1          a     TRUE    yes       1       4
    2          a    FALSE   null       2       6
    3          b     TRUE   null       6       3
    4          b     TRUE     no       3       4
    5          b    FALSE    yes       4       6
    6          c     TRUE     no      57       8
    7          d    FALSE   null      74       9

如果我想聚合位置上的重复记录,即两个 a 或三个 b,我一直在使用基本的 groupby 函数。这适用于简单的 tables.

但是,是否可以扩展此功能以在聚合时允许每列规则?作为 col1 的示例,如果存在 TRUE,它将胜过任何 FALSE 值,或者在 col3 中,它将对值求和,而在 col4 中,它添加计算平均值?是否可以为每列定义这些规则,然后在使用 groupby 时应用它们?

我在网上搜索过,但没有找到任何似乎涵盖这一点的内容,但是我可能找错了树。

谢谢。

使用groupbyagg

funcs = dict(
    col1=dict(Trump=lambda x: x.any()),
    col3='sum',
    col4=dict(Avg='mean')
)

df.groupby('location').agg(funcs)


在具有多列的 groupby 对象上使用 agg 时,您可以传递一个 dict 来定义将哪些函数应用到哪一列。

在这个高级字典 (funcs) 中,键是现有的列名,以应用值中定义的函数。

例如:

agg({'col1': lambda x: x.any(), 'col2': 'sum'})

说要在 col1 上使用 any(),在 col2 上使用 sum。如果 col1col2 在数据框中不存在,这将失败。

此外,我们不必忍受来自此聚合的默认列名。我将运行上面的小例子来说明。

df.groupby('location').agg({'col1': lambda x: x.any(), 'col3': 'sum'})

关于我们所做的事情没有太多描述。如果我们将字典作为函数传递,我们可以按照我们的意愿描述函数,键是描述,值是函数。我将使用相同的示例,但使用更好的描述对其进行扩展。

df.groupby('location').agg(
    {'col1': {'All I need is one True': lambda x: x.any()},
     'col3': {'SUMMATION': 'sum'}})

有了这些信息,希望我的解决方案非常有意义。