微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Pandas 的区间上应用函数/插补

如何解决如何在 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-011991-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 举报,一经查实,本站将立刻删除。