基于另一列的条件填充

时间:2019-11-08 09:04:01

标签: python pandas

我试图有条件地填充一个值,直到第二列遇到一个值,然后重置第一列的值。实际上,第一列是一个“ on”开关,直到“ off”开关(第二列)遇到一个值。我还没有一个使用ffill和where的有效示例。

示例输入:

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

所需的输出:

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

编辑:

处理基于另一列设置的值时存在问题。逻辑如下:开始应为零,直到R列低于25,然后为正数直到R列高于80,然后重复该循环。然而,尽管条件不匹配,但在第13行的起始位置莫名其妙地设置为1。

df = pd.DataFrame(np.random.randint(0, 100, size=100), columns=['R'])
df['Start'] = np.where((df.R < 25), 1, 0)
df['End'] = np.where((df.R > 80), 1, 0)
df.loc[df['End'].shift().eq(0), 'Start'] = df['Start'].replace(0, np.nan).ffill().fillna(0).astype(int)
        R   Start  End
0       58  0       0
1       98  0       1
2       91  0       1
3       69  0       0
4       55  0       0
5       57  0       0
6       64  0       0
7       75  0       1
8       78  0       1
9       90  0       1
10      24  1       0
11      89  1       1
12      36  0       0
13      70  **1**   0

1 个答案:

答案 0 :(得分:2)

尝试:

df.loc[df['End'].shift().eq(0), 'Start'] = df['Start'].replace(0, np.nan).ffill().fillna(0).astype(int)

[出]

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