我有一个系列df
:
index
0 1
1 1
2 1
3 1
4 1
5 -1
6 -1
7 -1
8 1
9 1
10 1
11 -1
dtype: int64
另一个boolean
系列喜欢指标或点b
:
index
0 False
1 False
2 True
3 False
4 False
5 False
6 True
7 False
8 False
9 True
10 False
11 False
我可以使用df
,b
设置df[b]=0
值:
index
0 1
1 1
2 0
3 1
4 1
5 -1
6 0
7 -1
8 1
9 0
10 1
11 -1
现在,我希望在2:5
,6:7
,9:11
之间使用值-1
填充值,并且我想要的结果是新的{{1} }:
df
这意味着当index
0 1
1 1
2 -1
3 -1
4 -1
5 -1
6 -1
7 -1
8 1
9 -1
10 -1
11 -1
为b
时,(索引:2,6,9),我会在True
之间填充值1
(索引: 2,6,9)和最近的df
值的索引(索引:5,7,11)。
填充值为-1
,填充范围为-1
我认为像[2:5,6:7,9:11]
,where
,replace
之类的方法,但无法解决这个问题。也许找到它的索引数组pad
和最近的[2,6,9]
数组-1
,并重新排列成[5,7,11]
是一种方式。
有一些方法更有用吗?
答案 0 :(得分:2)
numpy.where()
看起来可以做你需要的事情:
<强>代码:强>
import numpy as np
starts = np.where(df == 0)
ends = np.where(df == -1)
for start, end in zip(starts[0], ends[0]):
df[start:end] = -1
测试数据:
import pandas as pd
df = pd.DataFrame([1, 1, 1, 1, 1, -1, -1, -1, 1, 1, 1, -1])
b = pd.DataFrame([False, False, True, False, False, False, True,
False, False, True, False, False,])
df[b] = 0
print(df)
<强>结果:强>
0
0 1
1 1
2 -1
3 -1
4 -1
5 -1
6 -1
7 -1
8 1
9 -1
10 -1
11 -1