有条件地填充dataframe列的所有后续值

时间:2018-10-07 02:29:45

标签: python pandas dataframe

我想根据条件的第一个实例“前填充” DataFrame中新列的值。这是一个基本示例:

import pandas as pd
import numpy as np

x1 = [1,2,4,-3,4,1]

df1 = pd.DataFrame({'x':x1})

我想向df1添加一个新列-'condition'-在出现负数时该值为1,否则为0, 我希望其余找到负数后,将该列的值设置为1

所以,我将寻找所需的输出,如下所示:

    condition   x
0   0   1
1   0   2
2   0   4
3   1   -3
4   1   4
5   1   1

3 个答案:

答案 0 :(得分:2)

到目前为止,还没有人使用cummax

In [165]: df1["condition"] = (df1["x"] < 0).cummax().astype(int)

In [166]: df1
Out[166]: 
   x  condition
0  1          0
1  2          0
2  4          0
3 -3          1
4  4          1
5  1          1

答案 1 :(得分:1)

使用np.cumsum

df1['condition'] = np.where(np.cumsum(np.where(df1['x'] < 0, 1, 0)) == 0, 0, 1)

输出:

   x  condition
0  1          0
1  2          0
2  4          0
3 -3          1
4  4          1
5  1          1

答案 2 :(得分:1)

您可以在此处使用布尔序列:

df1['condition'] = (df1.index >= (df1['x'] < 0).idxmax()).astype(int)

print(df1)

   x  condition
0  1          0
1  2          0
2  4          0
3 -3          1
4  4          1
5  1          1