Pandas 边走边向前填充并求和

bpy*_*hon 1 python date pandas cumsum

我有一个稀疏的数据框,包括购买或出售库存的日期,如下所示:

Date         Inventory
2017-01-01       10 
2017-01-05       -5
2017-01-07       15
2017-01-09      -20
Run Code Online (Sandbox Code Playgroud)

我想解决的第一步是添加其他日期。我知道您可以使用重新采样,但只需突出显示这部分,以防它对下一个更困难的部分产生影响。如下:

Date         Inventory
2017-01-01       10
2017-01-02       NaN
2017-01-03       NaN
2017-01-04       NaN
2017-01-05       -5
2017-01-06       NaN
2017-01-07       15
2017-01-08       NaN
2017-01-09      -20
Run Code Online (Sandbox Code Playgroud)

最后一步是让它向前填充 NaN,除非它遇到一个新值,该值会添加到上面行的当前值中,以便最终的数据帧如下所示:

Date         Inventory
2017-01-01       10
2017-01-02       10
2017-01-03       10
2017-01-04       10
2017-01-05       5
2017-01-06       5
2017-01-07       20
2017-01-08       20
2017-01-09       0
2017-01-10       0
Run Code Online (Sandbox Code Playgroud)

我正在尝试采用 pythonic 方法来解决此问题,而不是基于循环的方法,因为那样会非常慢。

该示例也适用于具有多列的表,如下所示:

Date         InventoryA       InventoryB
2017-01-01       10              NaN
2017-01-02       NaN             NaN
2017-01-03       NaN              5
2017-01-04       NaN              5
2017-01-05       -5              NaN
2017-01-06       NaN             -10
2017-01-07       15              NaN
2017-01-08       NaN             NaN
2017-01-09      -20              NaN
Run Code Online (Sandbox Code Playgroud)

会成为:

Date         InventoryA     InventoryB
2017-01-01       10             0
2017-01-02       10             0
2017-01-03       10             5
2017-01-04       10            10
2017-01-05       5             10
2017-01-06       5              0
2017-01-07       20             0
2017-01-08       20             0
2017-01-09       0              0
2017-01-10       0              0
Run Code Online (Sandbox Code Playgroud)

希望这也有帮助。我认为当前的解决方案会对 nan 本身产生问题。

Ken*_*yme 5

您可以在重采样后将缺失值填充为0(当天库存没有变化),然后使用cumsum

df.fillna(0).cumsum()
Run Code Online (Sandbox Code Playgroud)