我最近一直在工作中使用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 - -