gpt4 book ai didi

python - Pandas:只要条件持续存在并且某个值出现在另一列中,就将值分配给一列

转载 作者:行者123 更新时间:2023-12-01 08:58:20 25 4
gpt4 key购买 nike

我有一个数据帧,其中包含某个条件、该条件连续发生次数的计数器以及某个值,如下所示:

         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

我想添加另一列“error”,在以下条件下其值为 1:
如果 count=1 时 value1=1 且条件=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)

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

最佳答案

用途:

#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

关于python - Pandas:只要条件持续存在并且某个值出现在另一列中,就将值分配给一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52647318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com