在 pandas 中使用 ffill 在以下 NaN 之间分配值

Distribute value across following NaNs using ffill in pandas

我有一个收到订单的数据框,例如:

 Date        Units
01-01-2020  2
02-01-2020  12
03-01-2020  NaN
04-01-2020  NaN
05-01-2020  5
06-01-2020  9
07-01-2020  NaN
08-01-2020  1

有时客户会订购更多数量,这样他们就不必在接下来的 1 或 2 天内重新订购。我试图找到客户在任何给定日期使用的平均数量。例如,如果客户订购 12,然后 2 天没有订购,则应将三天的所有单位更改为 4。 输出将是:

 Date        Units
01-01-2020  2
02-01-2020  4
03-01-2020  4
04-01-2020  4
05-01-2020  5
06-01-2020  4.5
07-01-2020  4.5
08-01-2020  1

我可以结合使用 ffill 和添加辅助列来计算连续的 NaN 值,但我觉得必须有更优雅的方法。

我们可以尝试使用 isnullcumsum 创建 groupby 密钥然后执行 transform

df['Units'] = df['Units'].fillna(0).groupby(df['Units'].notnull().cumsum()).transform('mean')
0    2.0
1    4.0
2    4.0
3    4.0
4    5.0
5    4.5
6    4.5
7    1.0