gpt4 book ai didi

python - Pandas 根据条件用值填充列

转载 作者:行者123 更新时间:2023-11-28 22:14:14 27 4
gpt4 key购买 nike

我的 pandas 数据框中有一列,如下所示:

   Status
1 Past Due
2 Yet to Calc
3 Overdue
4 Past Due
5 Past Due
6 Yet to Calc
7 Past Due
8 Past Due
9 Past Due
10 Yet to Calc
11 Overdue
12 Yet to Calc
13 Past Due
14 Past Due
15 Past Due
16 Yet to Calc
17 Overdue
18 Past Due
19 Past Due
20 Past Due
21 Yet to Calc

我想用“过期”填充“过期”和“尚未计算”之间的所有值。所以我的预期输出是:

   Status
1 Past Due
2 Yet to Calc
3 Overdue
4 Overdue
5 Overdue
6 Yet to Calc
7 Past Due
8 Past Due
9 Past Due
10 Yet to Calc
11 Overdue
12 Yet to Calc
13 Past Due
14 Past Due
15 Past Due
16 Yet to Calc
17 Overdue
18 Overdue
19 Overdue
20 Overdue
21 Yet to Calc

我尝试按切片分组并在组内向前填充,如下所示:

df3['Inventory_1'] = df3.groupby(df3.loc['Overdue':'Yet to Calc','Inventory_1']).ffill()

但是上面返回一个空系列并且不填充。

如果不使用 ffill,有什么方法可以解决这个问题?

最佳答案

这里的一般想法是屏蔽所有不是 Yet to CalcOverdue 的值,并使用ffill。然而,这也将 ffill Yet to Calc 转发,这是永远不需要的。因为我们只需要保留 Yet to Calc 以停止填充 Overdue 值,我们可以替换所有不是 Overdue 在我们的结果中包含原始 DataFrame 中包含的任何内容。


掩码 + ffill + isin

s = df.Status.mask(~df.Status.isin(['Overdue', 'Yet to Calc'])).ffill()
s[s.ne('Overdue')] = df.Status

print(s)

1        Past Due
2 Yet to Calc
3 Overdue
4 Overdue
5 Overdue
6 Yet to Calc
7 Past Due
8 Past Due
9 Past Due
10 Yet to Calc
11 Overdue
12 Yet to Calc
13 Past Due
14 Past Due
15 Past Due
16 Yet to Calc
17 Overdue
18 Overdue
19 Overdue
20 Overdue
21 Yet to Calc
Name: Status, dtype: object

关于python - Pandas 根据条件用值填充列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53490418/

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