gpt4 book ai didi

python - 在 Pandas 中具有后视和前视条件的 Fillna

转载 作者:行者123 更新时间:2023-12-04 01:29:39 25 4
gpt4 key购买 nike

我正在处理一个数据框,该数据框的一列包含多个我想根据以下条件填充的 NaN:如果向后和向前最多 3 行有 2 个相等的值,则用该值填充 NaN。

由于这可能不是很清楚,下面举几个例子:

  col1                    
0 10
1 10
2 NaN
3 NaN
4 NaN
5 10
6 5
7 NaN
8 5
9 NaN
10 NaN
11 NaN
12 NaN
  • 第 2 行中的值在第 1 行中为 10,在后面的第 3 行中为 10。 --> 填10
  • 第 3 行中的值在前两行中为 10,在后两行中为 10。 --> 填10
  • 第 4 行中的值在前 3 行中为 10,在前行中为 10。 --> 填10
  • 第 7 行中的值有一个 5 合 1 行向后和一个 5 合 1 行向前。 --> 填写5
  • 第 9 行中的值在前 1 行中有 5,但在后 3 行中没有 5。 --> 然后,不填

那么,结果是这样的:

  col1                    
0 10
1 10
2 10
3 10
4 10
5 10
6 5
7 5
8 5
9 NaN
10 NaN
11 NaN
12 NaN

我可以使用任何功能将此逻辑提供给 fillna 吗?

谢谢!!

最佳答案

您可以比较正向填充和反向填充 Series 与 limit 参数,链掩码与 & 用于按位与仅具有缺失值的行并将其替换为正向填充列:

m1 = df['col1'].isna()
f = df['col1'].ffill(limit=3)
m2 = f.eq(df['col1'].bfill(limit=3))

df['col2'] = df['col1'].mask(m1 & m2, f)
print (df)
col1 col2
0 10.0 10.0
1 10.0 10.0
2 NaN 10.0
3 NaN 10.0
4 NaN 10.0
5 10.0 10.0
6 5.0 5.0
7 NaN 5.0
8 5.0 5.0
9 NaN NaN
10 NaN NaN
11 NaN NaN
12 NaN NaN

关于python - 在 Pandas 中具有后视和前视条件的 Fillna,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61286258/

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