gpt4 book ai didi

python - Pandas ,将多列的多个功能应用于groupby对象

转载 作者:太空狗 更新时间:2023-10-29 17:46:22 27 4
gpt4 key购买 nike

我想将多列的多个函数应用到一个 groupby 对象,从而产生一个新的 pandas.DataFrame

我知道如何分步完成:

by_user = lasts.groupby('user')
elapsed_days = by_user.apply(lambda x: (x.elapsed_time * x.num_cores).sum() / 86400)
running_days = by_user.apply(lambda x: (x.running_time * x.num_cores).sum() / 86400)
user_df = elapsed_days.to_frame('elapsed_days').join(running_days.to_frame('running_days'))

这导致 user_df 为: user_df

但是我怀疑有更好的方法,比如:

by_user.agg({'elapsed_days': lambda x: (x.elapsed_time * x.num_cores).sum() / 86400, 
'running_days': lambda x: (x.running_time * x.num_cores).sum() / 86400})

但是,这不起作用,因为 AFAIK agg() 适用于 pandas.Series

我确实找到了 this question and answer ,但解决方案在我看来相当难看,考虑到答案已有将近四年的历史,现在可能有更好的方法。

最佳答案

解决方案的另一个坚实的变体是做@MaxU 用 this solution 做的事情至 a similar question并将各个函数包装在 Pandas 系列中,因此只需要 reset_index() 即可返回数据帧。

首先,定义转换函数:

def ed(group):
return group.elapsed_time * group.num_cores).sum() / 86400

def rd(group):
return group.running_time * group.num_cores).sum() / 86400

使用 get_stats 将它们打包成一个系列:

def get_stats(group):
return pd.Series({'elapsed_days': ed(group),
'running_days':rd(group)})

最后:

lasts.groupby('user').apply(get_stats).reset_index()

关于python - Pandas ,将多列的多个功能应用于groupby对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40532024/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com