我有一个pandas数据框,可使用以下命令:
house.groupby(['place_name'])['index_nsa'].agg(['first','last'])
它给了我我想要的东西。现在,我想创建一个自定义聚合值,该值使我可以得出第一个值和最后一个值之间的百分比变化。
在对值进行数学运算时出现错误,因此我假设必须将它们转换为数字。
house.groupby(['place_name'])['index_nsa'].agg({"change in %":[(int('last')-int('first')/int('first')]})
不幸的是,我仅在最后一个括号中看到语法错误,但似乎找不到该错误。
有人看到我错了吗?
答案 0 :(得分:1)
您将需要在此处定义并将回调传递给agg
。您可以使用lambda函数在线完成该操作:
house.groupby(['place_name'])['index_nsa'].agg([
("change in %", lambda x: (x.iloc[-1] - x.iloc[0]) / x.iloc[0])])
仔细查看.agg
调用-要允许重命名输出列,您必须传递格式为[(new_name, agg_func), ...]
的元组列表。更多信息here。
如果您要避免以一些冗长为代价的lambda,则可以使用
def first_last_pct(ser):
first, last = ser.iloc[0], ser.iloc[-1]
return (last - first) / first
house.groupby(['place_name'])['index_nsa'].agg([("change in %", first_last_pct)])