将用户提供的功能应用于groupby对象

时间:2020-11-10 13:43:17

标签: python pandas dataframe

我有一个数据框:

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(),但我们无法对groupby对象进行此操作。

1 个答案:

答案 0 :(得分:1)

使用此技巧-将列转换为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))