gpt4 book ai didi

python - 在非零值之间填充零,保留其他零

转载 作者:行者123 更新时间:2023-12-03 20:22:53 27 4
gpt4 key购买 nike

我需要按照标题中的说明在数据框列中填充零,我可以使用 iterrows() 或 itertuples()(类似的执行时间)和一些条件来完成,但我希望有一种更快的方法。
有一些连续的、相同的整数,有时它们之间有一个或两个零。这些是我需要用它们分隔的整数填充的零。所有其他零(不在非零整数之间,因此您也可以说连续超过两个的零)保持为零。

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

最佳答案

您可以先将 0 替换为 np.nan , ffillbfill并比较它们是否相等,然后保留 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 0

关于python - 在非零值之间填充零,保留其他零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67460334/

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