python - 根据其他列值创建一个新列 - 条件前向填充?
问题描述
有以下数据框
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
解决方案
你可以试试:
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
推荐阅读
- html - 手机上的复选框后面的汉堡菜单,但它不起作用
- ruby-on-rails - 将表单作为本地传递给在 Rails 5 中呈现的局部 ajax
- java - 将 java.awt.Image 对象转换为字节数组(`byte[]`)
- python - Beautifulsoup 没有从中提取信息
- c - c初始化结构的结构数组
- php - 如何使用php检查单词/字符串的第一个字母是否是特定字母?
- swift - 初始化时内存中CoreData容器为空
- vuetify.js - 如何获取 Vuetify2 VDataTable 中显示的项目/行列表?
- r - R如何绘制多个图(时间序列)
- bash - while循环回显变量直到在Bash中为空