我有一个数据框:
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对象进行此操作。
答案 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))