熊猫自定义聚合功能

时间:2019-06-23 02:21:51

标签: python pandas aggregate pandas-groupby

我有一个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')]})

不幸的是,我仅在最后一个括号中看到语法错误,但似乎找不到该错误。

有人看到我错了吗?

1 个答案:

答案 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)])