首页 > 解决方案 > 根据其他列值创建一个新列 - 条件前向填充?

问题描述

有以下数据框

d = {'c_1': [0,0,0,1,0,0,0,1,0,0,0,0],
     'c_2': [0,0,0,0,0,1,0,0,0,0,0,1]}

df = pd.DataFrame(d)

我想创建另一列'f',它返回1,c_1 == 1直到c_2 == 1在这种情况下,'f'中的值将为0

所需的输出如下

    c_1 c_2 f
0   0   0   0
1   0   0   0
2   0   0   0
3   1   0   1
4   0   0   1
5   0   1   0
6   0   0   0
7   1   0   1
8   0   0   1
9   0   0   1
10  0   0   1
11  0   1   0

认为这需要某种有条件的前向填充,查看以前的问题但未能达到所需的输出

编辑:遇到了输入不同且当前解决方案不起作用的相关场景。将确认已回答,但感谢以下任何输入

d = {'c_1': [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0],
     'c_2': [1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]}

df = pd.DataFrame(d)

所需的输出如下 - 与我要创建之前相同,另一列“f”返回 1,c_1 == 1直到c_2 == 1在这种情况下,“f”中的值将为 0

   c_1  c_2 f
0   0   1   0
1   0   1   0
2   0   1   0
3   0   0   0
4   0   0   0
5   0   0   0
6   1   0   1
7   0   0   1
8   0   1   0
9   0   1   0
10  0   1   0
11  0   1   0
12  0   1   0
13  0   0   0
14  0   0   0
15  0   0   0
16  1   0   1
17  0   0   1
18  1   0   1
19  1   0   1
20  0   0   1
21  0   0   1
22  0   0   1
23  0   0   1
24  0   1   0

标签: pythonpandasdataframe

解决方案


你可以试试:

df['f'] = df[['c_1','c_2']].sum(1).cumsum().mod(2)

print(df)

    c_1  c_2  f
0     0    0  0
1     0    0  0
2     0    0  0
3     1    0  1
4     0    0  1
5     0    1  0
6     0    0  0
7     1    0  1
8     0    0  1
9     0    0  1
10    0    0  1
11    0    1  0

推荐阅读