我可以使用两个类似的groupby函数来减少行数吗?

时间:2019-09-16 15:55:34

标签: python-3.x pandas pandas-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)

认为我可以保存一些代码行。有可能这样做吗?

谢谢

1 个答案:

答案 0 :(得分:0)

您将编写一个带有灵活参数的函数(给它一个描述性名称,与下面的不同):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']))