多索引DataFrame结合groupBy计算年度pct_change报错求助
解决多索引DataFrame分组计算年度pct_change的报错问题
报错原因
你推测的结论正确:groupby("company")后每个子组的索引仍是MultiIndex(company+date),而pct_change的freq参数要求索引必须是DatetimeIndex/PeriodIndex/TimedeltaIndex类型,因此触发NotImplementedError。
解决方案
在apply的lambda函数中,先移除子组里的company索引层级,只保留date作为单独的DatetimeIndex,再调用pct_change即可。
修改后的代码:
period = 1 df["pct_chng_3"] = df.groupby("company", group_keys=False)\ .apply(lambda x: x['indicator1'] .reset_index(level='company', drop=True) .pct_change(periods=period, freq='Y'))
代码说明
reset_index(level='company', drop=True):移除子组中的company索引层级,将date转为单独的DatetimeIndex,满足pct_change对索引类型的要求。freq='Y':指定按年度计算变化率,即每个日期对应前一年的同一日期计算百分比变化(如2018-01-01对应2017-01-01,2018-05-01因无2017-05-01数据,结果为NaN)。
示例结果片段
以company1为例,计算后的数据如下:
| company | date | indicator1 | pct_chng_3 |
|---|---|---|---|
| company1 | 2015-01-01 | 97.0 | NaN |
| company1 | 2016-01-01 | 55.0 | -0.4330 |
| company1 | 2017-01-01 | 47.0 | -0.1455 |
内容的提问来源于stack exchange,提问作者Arseni
相关产品推荐
相关产品推荐

