pandas填充两行索引之间的值(行只能找到一个值)

时间:2017-03-05 03:42:22

标签: python pandas numpy fill

我有一个系列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

我可以使用dfb设置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:56:79: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]wherereplace之类的方法,但无法解决这个问题。也许找到它的索引数组pad和最近的[2,6,9]数组-1,并重新排列成[5,7,11]是一种方式。

有一些方法更有用吗?

1 个答案:

答案 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