理解大Pandas中的apply和groupby

2024-09-29 23:21:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解一个来自Python的示例,用于Wes McKinney的数据分析书籍。我已经看过熊猫食谱,文档等等,但找不到这样的例子。在

{2012年联邦选举委员会的例子。下面的代码决定了向奥巴马和罗姆尼捐款的主要职业。在

我很难理解该函数如何获取groupby对象并对其执行另一个groupby操作。当我在函数外运行这个函数时,我得到一个错误。有人能解释一下这种行为吗?在

谢谢

依华厅

# top donor occupations donating to Obama or Romney
def get_top_amounts(group, key, n = 5):
    totals = group.groupby(key)['contb_receipt_amt'].sum()

    return totals.sort_values(ascending  = False)[:n]

# first group by candidate
grouped = fec_mrbo.groupby('cand_nm')

# for each group, group again by contb_receipt_amt so we have a hierarchical index
# take the contribution amount
# then return the total amount for each occupation by cand sorted to give top n
grouped.apply(get_top_amounts, 'contbr_occupation', n= 5)

结果是这样的

^{pr2}$

Tags: tokey函数getbyreturntopgroup
1条回答
网友
1楼 · 发布于 2024-09-29 23:21:50

当您在分组数据帧上使用^{{cd1>}时,实际上您正在遍历组并传递每个组函数,您正在应用。 让我们看一个简单的例子:

import pandas as pd
df = pd.DataFrame({'col1': [1,1,1,1,2,2,2,2],
                   'col2': ['a','b','a','b','a','b','a','b'],
                   'value': [1,2,3,4,5,6,7,8]})
grouped = df.groupby('col1')

现在让我们创建一个简单的函数,它允许我们查看传递给函数的内容:

^{pr2}$

正如您所看到的,每个组都作为单独的数据帧传递给函数。当然,您可以将所有的法线函数应用到这个子集。 您看到第一组两次是由于内部原因,无法更改,这不是bug;)。

让我们创建另一个函数来证明:

^{pr3}$

您甚至可以进一步做团体申请团体申请团体申请等。。。

我希望这能帮助你了解发生什么事。

顺便说一下,如果使用ipdb(调试工具),您可以在应用函数中设置断点a与组数据帧交互。

相关问题 更多 >

    热门问题