python - 高级聚合 pandas python

标签 python pandas dataframe group-by pandas-groupby

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

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 函数。这适用于简单的表格。

但是,是否可以扩展此功能以在聚合时允许每列规则?作为 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)

enter image description here


当在具有多列的 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'})

enter image description here

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

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

enter image description here

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

关于python - 高级聚合 pandas python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38618141/

相关文章:

python - 如何更改方法调用中的底层对象?

python - 使用 Tweepy 搜索 Twitter 源

Python - 如何合并和交换两个列表的每个第 n 个元素

Python - 连续转换日期时间对象,同时保持非日期时间对象相同

Python pandas 数据框用其他系列填充 NaN

python - 如何根据另一列中的值在数据框中设置零和一

python - SQLAlchemy 使用检查器确定 Integer 属性是否为外键

Python:将字典附加到现有的csv

python - 数据框行与列交互的 Lambda

python - dataframe.loc,索引 bool 值