首页 > 解决方案 > 我可以使用两个相似的 groupby 函数减少行吗?

问题描述

我有这个代码可以按预期与python3一起工作。

1

resumen = datos.groupby(['subid2']).agg(
    total_clicks = pd.NamedAgg('clicks', 'sum'),
    total_revenue = pd.NamedAgg('revenue', 'sum')
)
resumen['avg_cpc'] = resumen['total_revenue'] / resumen['total_clicks']
print(resumen)

2

words = datos.groupby(['subid2','keyword']).agg(
    total_clicks = pd.NamedAgg('clicks', 'sum'),
    total_revenue = pd.NamedAgg('revenue', 'sum')
)
words['avg_cpc'] = words['total_revenue'] / words['total_clicks']
print(words)

如您所见,#2 几乎与 #1 完全相同,但只是在 groupby 上添加了一个元素。

我尝试将#2更改为:

words = resumen.groupby('keyword'])
print(words)

认为我可以节省一些代码行。有可能以某种方式做到吗?

谢谢

标签: python-3.xpandaspandas-groupby

解决方案


您将编写一个具有灵活参数的函数(给它一个描述性的名称,与下面不同):by遵循与groupby.

def my_func(df, by):   
    res = df.groupby(by).agg(
            total_clicks = pd.NamedAgg('clicks', 'sum'),
            total_revenue = pd.NamedAgg('revenue', 'sum')
            )
    res['avg_cpc'] = res['total_revenue'] / res['total_clicks']
    return res

然后

print(my_func(datos, 'subid2'))
print(my_func(datos, ['subid2', 'keyword']))

推荐阅读