如何替换pandas中一些非零值之间的零值?
How to replace zero values in between some non-zero values in pandas?
我有一个包含传感器数据的数据框。传感器数据有波动。我想尽量减少这些波动,使其适合进一步分析。
我的数据样本如下:
0
------
0 5
1 5
2 0
3 5
4 5
5 0
6 0
7 0
8 0
9 0
10 1
11 1
12 0
13 1
14 1
15 0
16 3
17 3
18 3
19 0
20 0
21 0
22 0
非零值之间的零值是波动的结果。我希望将这些介于非零值之间的零值替换为相邻的非零值。这不应影响传感器数据列中存在的尾随零值和前导零值。
我想要的输出应该如下所示:
0
------
0 5
1 5
2 5 <---
3 5
4 5
5 0
6 0
7 0
8 0
9 0
10 1
11 1
12 1 <---
13 1
14 1
15 1 <---
16 3
17 3
18 3
19 0
20 0
21 0
22 0
箭头表示我需要的更换件。最好的方法是什么?
将0
替换为缺失值,然后用limit
参数前向填充缺失值,但仅针对前向和后向填充值没有缺失值的行:
s = df[0].replace(0, np.nan)
ff = s.ffill(limit=1)
bf = s.bfill(limit=1)
df['new'] = np.where(ff.notna() & bf.notna(), ff, 0).astype(int)
print (df)
0 new
0 5 5
1 5 5
2 0 5
3 5 5
4 5 5
5 0 0
6 0 0
7 0 0
8 0 0
9 0 0
10 1 1
11 1 1
12 0 1
13 1 1
14 1 1
15 0 1
16 3 3
17 3 3
18 3 3
19 0 0
20 0 0
21 0 0
22 0 0
第一种方法
步骤:
- 将列转换为列表。
- 遍历 list ,如果值为 0,则检查每个索引,如果是,则使当前索引值与上一个相同,否则遍历下一个。
- 将新列表作为数据框中的一列。
第二种方法
在dataframe中使用ffill()方法,如果当前值为0则复制之前的值
我有一个包含传感器数据的数据框。传感器数据有波动。我想尽量减少这些波动,使其适合进一步分析。
我的数据样本如下:
0
------
0 5
1 5
2 0
3 5
4 5
5 0
6 0
7 0
8 0
9 0
10 1
11 1
12 0
13 1
14 1
15 0
16 3
17 3
18 3
19 0
20 0
21 0
22 0
非零值之间的零值是波动的结果。我希望将这些介于非零值之间的零值替换为相邻的非零值。这不应影响传感器数据列中存在的尾随零值和前导零值。
我想要的输出应该如下所示:
0
------
0 5
1 5
2 5 <---
3 5
4 5
5 0
6 0
7 0
8 0
9 0
10 1
11 1
12 1 <---
13 1
14 1
15 1 <---
16 3
17 3
18 3
19 0
20 0
21 0
22 0
箭头表示我需要的更换件。最好的方法是什么?
将0
替换为缺失值,然后用limit
参数前向填充缺失值,但仅针对前向和后向填充值没有缺失值的行:
s = df[0].replace(0, np.nan)
ff = s.ffill(limit=1)
bf = s.bfill(limit=1)
df['new'] = np.where(ff.notna() & bf.notna(), ff, 0).astype(int)
print (df)
0 new
0 5 5
1 5 5
2 0 5
3 5 5
4 5 5
5 0 0
6 0 0
7 0 0
8 0 0
9 0 0
10 1 1
11 1 1
12 0 1
13 1 1
14 1 1
15 0 1
16 3 3
17 3 3
18 3 3
19 0 0
20 0 0
21 0 0
22 0 0
第一种方法
步骤:
- 将列转换为列表。
- 遍历 list ,如果值为 0,则检查每个索引,如果是,则使当前索引值与上一个相同,否则遍历下一个。
- 将新列表作为数据框中的一列。
第二种方法
在dataframe中使用ffill()方法,如果当前值为0则复制之前的值