我有以下DF。我尝试做一个布尔级数,其中的逻辑是: (0后面跟1是真的。1前面加0是正确的。其他的都是假的) 这是DataFrame
df = pd.DataFrame({'A': {0: 1, 1: 0, 2: 1, 3: 1, 4: 1, 5: 0, 6: 1, 7: 1, 8: 1, 9: 1, 10: 0, 11: 0, 12: 1}})
A
0 1
1 0
2 1
3 1
4 1
5 0
6 1
7 1
8 1
9 1
10 0
11 0
12 1
期望输出(0后面跟1)为真。1前面加0是正确的。其他的都是假的:
A Truth
0 1 False
1 0 True
2 1 True
3 1 False
4 1 False
5 0 True
6 1 True
7 1 False
8 1 False
9 1 False
10 0 False
11 0 True
12 1 True
我的输出使用:df(“真理”)= df [A] = = 0 | ((df [A] .shift () = = 0) & (df (A) = = 1))
A Truth
0 1 False
1 0 True
2 1 True
3 1 False
4 1 False
5 0 True
6 1 True
7 1 False
8 1 False
9 1 False
10 0 True
11 0 True
12 1 True
我在一个0上得到了真值,但是一个0只有在后面跟着一个0时才应该是真值,而不是另一个0。任何帮助将不胜感激。谢谢。 问题来源StackOverflow 地址:/questions/59382223/how-to-create-a-boolean-series-based-on-the-logic-0-followed-by-a-1-is-true-a
try:
cond1 = df['A'].diff().shift(-1).eq(1).where(df['A']==0)
df['Truth'] = df['A'].diff().eq(1).where(df['A'] == 1).fillna(cond1).astype('bool')
print(df)
输出:
A Truth
0 1 False
1 0 True
2 1 True
3 1 False
4 1 False
5 0 True
6 1 True
7 1 False
8 1 False
9 1 False
10 0 False
11 0 True
12 1 True
检查条件1,只在A == 0的地方设置,然后检查条件2,只在A == 1的地方设置,使用fillna将两个条件合并。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。