在 Pandas 中具有向后和前瞻条件的 Fillna
Fillna with backwards and forward looking condition in Pandas
我正在使用一个数据框,其中有一列包含多个 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
我正在使用一个数据框,其中有一列包含多个 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