首页 文章

Python Pandas:fillna / bfill使用函数

提问于
浏览
1

我从库存管理系统中检索了几个物品的库存变动:

index   itemid    date      sold    received    balance  stock_level
0       123456    30.03.18  -1      0           -1       3
1       123456    04.04.18  -1      0           -1       2
2       123456    09.04.18   0      1            1       3
3       123457    01.04.18   0      1            1       3
4       123457    03.04.18  -1      0           -1       2
5       123457    11.04.18   0      1            1       3

为了进行正确的分析,我创建了一个连续的日期序列

index   itemid    date    sold  received   balance  stock_level
0       123456    28.03.18  0   0           0       nan
1       123456    29.03.18  0   0           0       nan
2       123456    30.03.18  -1  0           -1      3
3       123456    31.03.18  0   0           0       nan
4       123456    01.04.18  0   0           0       nan
5       123456    02.04.18  0   0           0       nan
6       123456    03.04.18  0   0           0       nan
7       123456    04.04.18  -1  0           -1      2
8       123456    05.04.18  0   0           0       nan
9       123456    06.04.18  0   0           0       nan
10      123456    07.04.18  0   0           0       nan
11      123456    08.04.18  0   0           0       nan
12      123456    09.04.18  0   1           1       3
13      123456    10.04.18  0   0           0       nan
14      123456    11.04.18  0   0           0       nan
15      123457    28.03.18  0   0           0       nan
16      123457    29.03.18  0   0           0       nan
17      123457    30.03.18  0   0           0       nan
18      123457    31.03.18  0   0           0       nan
19      123457    01.04.18  0   1           1       3
20      123457    02.04.18  0   0           0       nan
21      123457    03.04.18  -1  0           -1      2
22      123457    04.04.18  0   0           0       nan
23      123457    05.04.18  0   0           0       nan
[...]
28      123457    11.04.18  0   1           1       3

现在,我需要为每个项目 groupby(itemid) 填充库存列中的nan值 . 我可以使用ffill为每个组填充第3行的值,但需要根据(第一个非南股票 Value ) - (该指数的余额值)的函数为每个组填充 .

例如 . 索引0的bfill应该是(stock_level at index 2) - (索引2处的余额) .

也就是说,我正在寻找的结果是

index   itemid    date    sold  received   balance  stock_level
0       123456    28.03.18  0   0           0       4
1       123456    29.03.18  0   0           0       4
2       123456    30.03.18  -1  0           -1      3
3       123456    31.03.18  0   0           0       3
4       123456    01.04.18  0   0           0       3
5       123456    02.04.18  0   0           0       3
6       123456    03.04.18  0   0           0       3
7       123456    04.04.18  -1  0           -1      2
8       123456    05.04.18  0   0           0       2
9       123456    06.04.18  0   0           0       2
10      123456    07.04.18  0   0           0       2
11      123456    08.04.18  0   0           0       2
12      123456    09.04.18  0   1           1       3
13      123456    10.04.18  0   0           0       3
14      123456    11.04.18  0   0           0       3
15      123457    28.03.18  0   0           0       2
16      123457    29.03.18  0   0           0       2
17      123457    30.03.18  0   0           0       2
18      123457    31.03.18  0   0           0       2
19      123457    01.04.18  0   1           1       3
20      123457    02.04.18  0   0           0       3
21      123457    03.04.18  -1  0           -1      2
22      123457    04.04.18  0   0           0       2
23      123457    05.04.18  0   0           0       2
[...]
28      123457    11.04.18  0   1           1       3

如何根据第一个非纳米值的索引处的函数回填每个项目组?

1 回答

  • 2

    ffill 之后,剩下的唯一NaN就是那些开始时的NaN .
    你需要在这里使用 pd.Series.first_valid_index ,以及 ffillfillna 的组合 .

    i = df.stock_level.first_valid_index()
    df.stock_level.ffill().fillna(df.stock_level[i] - df.balance[i])
    
    0     4.0
    1     4.0
    2     3.0
    3     3.0
    4     3.0
    5     3.0
    6     3.0
    7     2.0
    8     2.0
    9     2.0
    10    2.0
    11    2.0
    12    3.0
    13    3.0
    14    3.0
    Name: stock_level, dtype: float64
    

相关问题