我使用groupby从另一个df创建了一个新的df,如下所示:
weekly_by_user = \
df.groupby('week','user_id') \
.agg( \
count('order_id').alias('total_orders'), \
sum('gmv').alias('gmv'), \
countDistinct('buyer_id').alias('dcnt_buyers'))我的期望是创建一个可以传递所有3列(order_id、gmv、buyer_id)和3个函数(计数、和、countDistinct)的函数,并返回与上面的查询相同的输出。
对于1 col,它可以通过创建一个函数来完成:
def df_new(df, cols, func, new_col_name):
for col in cols:
df_new = df.groupby('week','user_id') \
.agg(func(col).alias(new_col_name))
return df_new然后跑到第一个像:
total_orders = df_groupby(df, 'order_id', count, 'total_orders')但是我不知道如何申请所有3所学校的1项功能。有人能提出解决办法吗?
提亚
发布于 2022-07-18 16:29:04
试试这个:
def df_new(df, cols, funcs, new_col_names):
df_new = (
df
.groupby('week', 'user_id')
.agg(*[func(cols[index]).alias(new_col_names[index]) for index, func in enumerate(funcs)])
)
return df_newhttps://stackoverflow.com/questions/73025443
复制相似问题