我有一个数据帧:
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))