开发者社区> 问答> 正文

如何创建一个布尔级数基于逻辑:(0后面跟1是真的。1前面加0是正确的。其他的都是假的)

我有以下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

展开
收起
kun坤 2019-12-27 17:15:38 345 0
1 条回答
写回答
取消 提交回答
  • 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将两个条件合并。

    2019-12-27 17:15:52
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
重新定义计算的边界 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载