在python pandas中搜索并选择单元格周围的区域



我最近一直在工作中使用pandas,我对它相当陌生。我有一个数据框架,我想在整个数据框架中搜索一个特定的字符串,然后在它的右侧和左侧选择n单元格。我该怎么做呢?

假设这个虚拟输入,我们将寻找0作为目标,n=2的值在左/右:

np.random.seed(0)
df = pd.DataFrame(np.random.randint(0, 10, size=[10,10]))
0  1  2  3  4  5  6  7  8  9
0  5  0  3  3  7  9  3  5  2  4
1  7  6  8  8  1  6  7  7  8  1
2  5  9  8  9  4  3  0  3  5  0
3  2  3  8  1  3  3  3  7  0  1
4  9  9  0  4  7  3  2  7  2  0
5  0  4  5  5  6  8  4  1  4  9
6  8  1  1  7  9  9  3  6  7  2
7  0  3  5  9  4  4  6  4  4  3
8  4  4  8  4  3  7  5  5  0  1
9  5  9  3  0  5  0  1  2  4  2

处理:

n = 2
# get target as mask
mask = df.eq(0)
#generate a mask
mask2 = mask.astype(int).rolling(2*n+1, min_periods=1, center=True, axis=1).sum().gt(0)
# select cells
# here it's unclear what you want to do
# so as example let's mask the non-match cells
df.where(mask2, '-')

输出:

0  1  2  3  4  5  6  7  8  9
0  5  0  3  3  -  -  -  -  -  -
1  -  -  -  -  -  -  -  -  -  -
2  -  -  -  -  4  3  0  3  5  0
3  -  -  -  -  -  -  3  7  0  1
4  9  9  0  4  7  -  -  7  2  0
5  0  4  5  -  -  -  -  -  -  -
6  -  -  -  -  -  -  -  -  -  -
7  0  3  5  -  -  -  -  -  -  -
8  -  -  -  -  -  -  5  5  0  1
9  -  9  3  0  5  0  1  2  -  -

最新更新