高级聚合 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 时应用它们?
我在网上搜索过,但没有找到任何似乎涵盖这一点的内容,但是我可能找错了树。
谢谢。
使用groupby
和agg
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
。如果 col1
或 col2
在数据框中不存在,这将失败。
此外,我们不必忍受来自此聚合的默认列名。我将运行上面的小例子来说明。
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'}})
有了这些信息,希望我的解决方案非常有意义。
如果我有一个简单的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 时应用它们?
我在网上搜索过,但没有找到任何似乎涵盖这一点的内容,但是我可能找错了树。
谢谢。
使用groupby
和agg
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
。如果 col1
或 col2
在数据框中不存在,这将失败。
此外,我们不必忍受来自此聚合的默认列名。我将运行上面的小例子来说明。
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'}})
有了这些信息,希望我的解决方案非常有意义。