熊猫:只要条件持续存在并且某个值出现在另一列中,则为该列分配值

卢卡91

我有一个数据框,其中包括一个特定条件,一个条件连续发生次数的计数器以及一个特定值,看起来像这样:

         date                condition         count        Value1    Value2
    01,01,2018 08:00             A               1            0         0
    01,01,2018 08:01             A               2            0         0
    01,01,2018 08:02             A               3            0         0
    01,01,2018 08:03             B               1            1         1
    01,01,2018 08:04             B               2            0         1
    01,01,2018 08:05             B               3            0         1
    01,01,2018 08:06             B               4            0         0
    01,01,2018 08:07             C               1            0         0
    01,01,2018 08:08             C               2            0         0
    01,01,2018 08:09             C               3            0         0
    01,01,2018 08:10             C               4            0         0
    01,01,2018 08:11             C               5            0         0
    01,01,2018 08:12             A               1            0         0
    01,01,2018 08:13             A               2            0         0
    01,01,2018 08:14             B               1            0         0
    01,01,2018 08:15             B               2            0         1
    01,01,2018 08:16             B               3            0         1
    01,01,2018 08:17             C               1            0         0

我想添加另一列“错误”,该列在条件下具有值1:
如果在count = 1时,如果value1 = 1和condition = B,则只要value2 = 1,就分配error = 1。

它应该看起来像:

         date                condition         count        Value1    Value2    error 
    01,01,2018 08:00             A               1            0         0        0
    01,01,2018 08:01             A               2            0         0        0
    01,01,2018 08:02             A               3            0         0        0
    01,01,2018 08:03             B               1            1         1        1
    01,01,2018 08:04             B               2            0         1        1
    01,01,2018 08:05             B               3            0         1        1
    01,01,2018 08:06             B               4            0         0        0
    01,01,2018 08:07             C               1            0         0        0
    01,01,2018 08:08             C               2            0         0        0
    01,01,2018 08:09             C               3            0         0        0
    01,01,2018 08:10             C               4            0         0        0
    01,01,2018 08:11             C               5            0         0        0
    01,01,2018 08:12             A               1            0         0        0
    01,01,2018 08:13             A               2            0         0        0
    01,01,2018 08:14             B               1            0         0        0
    01,01,2018 08:15             B               2            0         1        0
    01,01,2018 08:16             B               3            0         1        0
    01,01,2018 08:17             C               1            0         0        0

请注意,条件B第二次出现时,value1永远不会等于1,因此即使value2 = 1也没有错误。

我已经尝试过类似的事情:

df['error']=np.where(((df['value1']==1) & (df['condition']=='B') & df['value2']==1)) | ((df['error'].shift(1)=='1')&(df['value2']==1))),'1', 0)

但是它给了我主要的错误,因为我df['error'].shift(1)=='1'在列本身“尚不存在”时调用where条件。任何的想法?预先感谢您的帮助!

耶斯列尔

使用:

#conditions
mask = (df['Value1']==1) & (df['condition']=='B') & (df['Value2']==1)
#series for unique consecutive values
a = df['Value2'].ne(df['Value2'].shift()).cumsum()
#per each consecutive group cal cumulative sum, convert to boolean and then to integers
df['error'] = mask.groupby(a).cumsum().astype(bool).astype(int)
print (df)
                date condition  count  Value1  Value2  error
0   01,01,2018 08:00         A      1       0       0      0
1   01,01,2018 08:01         A      2       0       0      0
2   01,01,2018 08:02         A      3       0       0      0
3   01,01,2018 08:03         B      1       1       1      1
4   01,01,2018 08:04         B      2       0       1      1
5   01,01,2018 08:05         B      3       0       1      1
6   01,01,2018 08:06         B      4       0       0      0
7   01,01,2018 08:07         C      1       0       0      0
8   01,01,2018 08:08         C      2       0       0      0
9   01,01,2018 08:09         C      3       0       0      0
10  01,01,2018 08:10         C      4       0       0      0
11  01,01,2018 08:11         C      5       0       0      0
12  01,01,2018 08:12         A      1       0       0      0
13  01,01,2018 08:13         A      2       0       0      0
14  01,01,2018 08:14         B      1       0       0      0
15  01,01,2018 08:15         B      2       0       1      0
16  01,01,2018 08:16         B      3       0       1      0
17  01,01,2018 08:17         C      1       0       0      0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫:如果列中的值出现在另一列中,则用第三列中的值替换

熊猫:删除其中一列的值出现在另一列中的任何行的行

如果一列的值出现在另一列中,则对行进行分组

使特定变量的值出现在R df列中,作为另一列中文本的条件

根据另一列中的唯一值计算项目出现在熊猫数据框中的一列中的次数

当模式出现在另一列中时,更改两列的值

根据出现在另一列中的值清除列

一列中有多少个值出现在另一 R 中

查找任何值出现在另一列中的情况

用于显示一列中未出现在另一列中的值的公式

SQL-列值,取决于另一列值是否出现在第三列中

EXCEL 公式计算每个值出现在另一列中每个唯一 ID 的列中的次数

熊猫:根据另一列中的条件更改该列的先前单元格值

显示其中列值未出现在另一列的同一组中的行

如何选择值出现在另一个表的几列中的任何一列中的行?

计算一列中有多少个字符出现在另一列(熊猫)中

对一列中的唯一值出现在另一列中的次数进行编号。也给他们编号

向 df 添加一列,计算另一列中某个值的出现次数

确定某个值是否第一次出现在列中

熊猫-检查列标签是否存在于另一列的值中并更新该列

熊猫在另一列中出现某个值之前选择行的子集

识别值连续出现在pandas DataFrame的一列中

一列中的火花词不应出现在另一列中

熊猫:如何创建一列来指示值,该值预先在另一列中存在一定数量的行?

根据另一列中的相同值将值分配给该列

使用熊猫,如何根据另一列的值分配列中的值?

熊猫根据选择为条件的另一列中的值创建一列

用另一列的条件填充一列并移动熊猫中的值

熊猫为另一列分配不同的值,取决于另一列中的值