python-3.x - 我可以使用两个相似的 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)
认为我可以节省一些代码行。有可能以某种方式做到吗?
谢谢
解决方案
您将编写一个具有灵活参数的函数(给它一个描述性的名称,与下面不同):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']))
推荐阅读
- node.js - 模型表未在 mysql loopback 3 中自动创建
- python - 如何在 android (kivy) 上通过 python 多处理使用共享内存?
- vb.net - 在 VB.Net 2019 中一一播放不同的 MP3 文件
- neo4j - 在 Neo4j 中,如何在一个节点和一组其他节点之间创建关系?
- arrays - 如何让 React Hooks 返回一个数组
- r - R中naive_bayes的预测数据帧中的因素
- c++ - 为什么它说#include
包含在c++中时不包含? - html - 溢出锚不适用于滚动顶部位置
- node.js - getstream 通知订阅不会推送带有计数的聚合信息
- android - Ubuntu 上的 Android Studio adb