gre*_*ent 2 python dataframe pandas
有以下数据框
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)
Run Code Online (Sandbox Code Playgroud)
我想创建另一列 '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
Run Code Online (Sandbox Code Playgroud)
认为这需要某种有条件的前向填充,查看以前的问题但无法达到所需的输出
编辑:遇到过输入不同且当前解决方案不起作用的相关场景。将确认回答但感谢以下任何输入
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)
Run Code Online (Sandbox Code Playgroud)
所需的输出如下 - 与我想创建之前相同,另一列 '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
Run Code Online (Sandbox Code Playgroud)
你可以试试:
df['f'] = df[['c_1','c_2']].sum(1).cumsum().mod(2)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)