gpt4 book ai didi

Python Pandas : fillna/bfill using function

转载 作者:行者123 更新时间:2023-12-01 01:58:12 26 4
gpt4 key购买 nike

我已从库存管理系统中检索了多个商品的库存变动情况:

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) 填充 stock 列中的 nan 值。我可以对每个组使用 ffill 来填充第三行的值,但需要根据(第一个非 nan 股票值)-(该索引处的余额值)的函数对每个组进行 bfill。

例如索引 0 的 bfill 应该是(索引 2 处的 stock_level)-(索引 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

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

最佳答案

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

关于Python Pandas : fillna/bfill using function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49940329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com