python – 如何根据条件更改pandas系列中的值

我有一个只有二进制值的熊猫系列

0
0   1
1   0
2   0
3   0
4   1
5   0
6   1
7   0
8   0
9   1
10  0
11  1
12  0
13  1
14  0

我想隐藏系列中的值,它是零,并且它周围有一个,即基本上改变1,1到1,1,1.

我需要的输出是:

0     1
1     0
2     0
3     0
4     1
5     1
6     1
7     0
8     0
9     1
10    1
11    1
12    1
13    1
14    0

在这里尝试的是创建一个3的滚动窗口,并检查值是否是我需要的.有没有更好的方法来做这个?

>>> window = df.rolling(3,center=True)
>>> (df[0] | window.apply(lambda x: 1 if (x == [1,1]).all() else 0)[0].fillna(0)).astype(int)

注意:我也试过了换档功能.

解决方法

使用 shift表示布尔掩码,并按 numpy.where设置1:

m1 = df[0].shift() == 1
m2 = df[0].shift(-1) == 1
m3 = df[0] == 0

df[0] = np.where(m1 & m2 & m3,df[0])

print (df)
    0
0   1
1   0
2   0
3   0
4   1
5   1
6   1
7   0
8   0
9   1
10  1
11  1
12  1
13  1
14  0

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...