我需要在dataframe列中填充零,正如在title中所说,我可以使用iterrow()或itertuples() (类似的执行时间)使用一些条件,但我希望有一种更快的方法。
有些连续的、相同的整数有时在它们之间有一个或两个零。这些是我需要用它们分开的整数填充的零。所有其他的零(在非零ints之间,所以你也可以说那些连续超过两个)仍然是零。
x = [[0,0,0,0,0,2,2,2,0,2,2,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,0],
[0,0,0,0,3,3,0,0,3,3,3,3,0,0,0,0,0,2,2,2,0,2,2,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0]]
df = pd.DataFrame.from_records(x).T
df.columns = ['x', 'y', 'z']
x y z
0 0 0 0
1 0 0 0
2 0 0 0
3 0 0 0
4 0 3 0
5 2 3 0
6 2 0 0
7 2 0 0
8 0 3 0
9 2 3 1
10 2 3 1
11 0 3 1
12 0 0 0
13 0 0 0
14 0 0 1
15 0 0 1
16 0 0 1
17 0 2 0
18 0 2 1
19 1 2 1
20 1 0 1
21 1 2 0
22 0 2 0
23 0 0 0
24 1 0 0
25 1 0 0
26 0 0 0
27 0 0 0
28 0 0 0
29 0 0 0预期的产出将是:
x y z
0 0 0 0
1 0 0 0
2 0 0 0
3 0 0 0
4 0 3 0
5 2 3 0
6 2 3 0
7 2 3 0
8 2 3 0
9 2 3 1
10 2 3 1
11 0 3 1
12 0 0 1
13 0 0 1
14 0 0 1
15 0 0 1
16 0 0 1
17 0 2 1
18 0 2 1
19 1 2 1
20 1 2 1
21 1 2 0
22 1 2 0
23 1 0 0
24 1 0 0
25 1 0 0
26 0 0 0
27 0 0 0
28 0 0 0
29 0 0 0发布于 2021-05-09 17:48:27
您可以首先用np.nan、ffill和bfill替换0,然后比较它们是否相等,然后保留ffilled df并将0赋值给其他人:
u = df.replace(0,np.nan)
a = u.ffill()
b = u.bfill()
yourout = a.where(a==b,0).astype(df.dtypes)print(yourout)
x y z
0 0 0 0
1 0 0 0
2 0 0 0
3 0 0 0
4 0 3 0
5 2 3 0
6 2 3 0
7 2 3 0
8 2 3 0
9 2 3 1
10 2 3 1
11 0 3 1
12 0 0 1
13 0 0 1
14 0 0 1
15 0 0 1
16 0 0 1
17 0 2 1
18 0 2 1
19 1 2 1
20 1 2 1
21 1 2 0
22 1 2 0
23 1 0 0
24 1 0 0
25 1 0 0
26 0 0 0
27 0 0 0
28 0 0 0
29 0 0 0https://stackoverflow.com/questions/67460334
复制相似问题