对groupby对象应用用户提供的函数



我有一个数据帧:

pri_col col1 col2        Date
r1    3    4  2020-09-10
r1    4    1  2020-09-10
r2    2    7  2020-09-11
r2    6    4  2020-09-11

我在pri_col和date列上执行groupby,然后在其余列上应用一个函数。

但这里的问题是,我需要将函数作为用户的输入。例如

func = input('Function to use: ')
ret_df = ip_df.groupby(['pri_col','date']).apply(eval(func))

但这也应用了pri_col和date上的函数,这是不需要的。

例如。如果用户提供"sum"作为输入,我希望最终输出像

pri_col col1 col2        Date
r1    7    5   2020-09-10
r2    8    11  2020-09-11

这个问题还有其他解决办法吗?我尝试过删除.apply((并直接使用.eval((,但我们不能按对象分组。

使用此技巧-将列转换为MultiIndex,因此不按函数处理:

ret_df = ip_df.set_index(['pri_col','date']).groupby(['pri_col','date']).apply(eval(func))

对于老年熊猫版本使用:

ret_df = ip_df.set_index(['pri_col','date']).groupby(level=[0, 1]).apply(eval(func))

最新更新