如何解决如何在 Pandas 的区间上应用函数/插补
我有一个 Pandas 数据集,其中包含每月日期时间索引和一列未完成订单(如下所示):
日期 | 订单 |
---|---|
1991-01-01 | 南 |
1991-02-01 | 南 |
1991-03-01 | 24 |
1991-04-01 | 南 |
1991-05-01 | 南 |
1991-06-01 | 南 |
1991-07-01 | 南 |
1991-08-01 | 34 |
1991-09-01 | 南 |
1991-10-01 | 南 |
1991-11-01 | 22 |
1991-12-01 | 南 |
我想对值进行线性插值以填充 nan。但是,它必须在 6 个月的区块(非滚动)内应用。因此,例如,一个 6 个月的块将是 1991-01-01
和 1991-06-01
之间的所有行,我们将在其中进行向前和向后线性插补,这样如果存在 nan
,插值将下降到最终值 0。因此,对于上面的相同数据集,我希望最终结果如下:
日期 | 订单 |
---|---|
1991-01-01 | 8 |
1991-02-01 | 16 |
1991-03-01 | 24 |
1991-04-01 | 18 |
1991-05-01 | 12 |
1991-06-01 | 6 |
1991-07-01 | 17 |
1991-08-01 | 34 |
1991-09-01 | 30 |
1991-10-01 | 26 |
1991-11-01 | 22 |
1991-12-01 | 11 |
然而,我不知道如何在 Pandas 中做到这一点。有什么想法吗?
解决方法
想法是每 6 个月分组一次,添加和附加 0 个值,插入然后删除每组的第一个和最后一个 0 值:
df['Date'] = pd.to_datetime(df['Date'])
f = lambda x: pd.Series([0] + x.tolist() + [0]).interpolate().iloc[1:-1]
df['orders'] = (df.groupby(pd.Grouper(freq='6MS',key='Date'))['orders']
.transform(f))
print (df)
Date orders
0 1991-01-01 8.0
1 1991-02-01 16.0
2 1991-03-01 24.0
3 1991-04-01 18.0
4 1991-05-01 12.0
5 1991-06-01 6.0
6 1991-07-01 17.0
7 1991-08-01 34.0
8 1991-09-01 30.0
9 1991-10-01 26.0
10 1991-11-01 22.0
11 1991-12-01 11.0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。