У меня есть dataframe, содержащий столбец datetime, условие, счетчик количества последовательных раз таких условий и столбец значений. Это выглядит как:
date condition count Value
01,01,2018 08:00 A 1 9
01,01,2018 08:01 A 2 9
01,01,2018 08:02 A 3 9
01,01,2018 08:03 B 1 9
01,01,2018 08:04 B 2 9
01,01,2018 08:05 B 3 4
01,01,2018 08:06 B 4 9
01,01,2018 08:07 C 1 9
01,01,2018 08:08 C 2 9
01,01,2018 08:09 C 3 9
01,01,2018 08:10 C 4 9
Мне нужен столбец ошибок, который возвращает 1 во всех строках между 1 и 3 и condition = B, когда:
-condition = B
-count <= 3
-at наименьшее значение <5
Желаемый результат:
enter code here
date condition count Value error
01,01,2018 08:00 A 1 9 0
01,01,2018 08:01 A 2 9 0
01,01,2018 08:02 A 3 9 0
01,01,2018 08:03 B 1 9 1
01,01,2018 08:04 B 2 9 1
01,01,2018 08:05 B 3 4 1
01,01,2018 08:06 B 4 9 0
01,01,2018 08:07 C 1 9 0
01,01,2018 08:08 C 2 9 0
01,01,2018 08:09 C 3 9 0
01,01,2018 08:10 C 4 9 0
Я пытался:
df['error']=np.where((df['condition']=='B') & (df['count']<=5) & ((df['Value']).all()>=5), 1, 0)
df['error']=np.where((df['condition']=='B') & (df['count']<=5) & (df.value.apply(lambda x: x<5).any()),0,1)
но никто из них не работает. Вы можете мне помочь? Спасибо :)
Попробуй это:
df.loc[(df['condition']=='B')&(df['count']<=3),'error']=1
Демо (сделать полный код):
df = your data
df['error']=0
df.loc[(df['condition']=='B')&(df['count']<=3),'error']=1
print(df)
Выход:
date condition count Value error
01,01,2018 08:00 A 1 9 0
01,01,2018 08:01 A 2 9 0
01,01,2018 08:02 A 3 9 0
01,01,2018 08:03 B 1 9 1
01,01,2018 08:04 B 2 9 1
01,01,2018 08:05 B 3 4 1
01,01,2018 08:06 B 4 9 0
01,01,2018 08:07 C 1 9 0
01,01,2018 08:08 C 2 9 0
01,01,2018 08:09 C 3 9 0
01,01,2018 08:10 C 4 9 0
Теперь это как и ожидалось.
Я не уверен, что правильно понимаю ваше использование, но это может сработать для вас
mask = ((df['condition'] == 'B') & (df['count'] <= 5))
if df.loc[mask, 'Value'].min() < 5:
df.loc[mask, 'Error'] = 1
Трудно сказать, что вы устанавливаете значения в одной строке на основе группы строк. Я не очень доволен этим ответом, потому что для многих случаев использования он не будет масштабироваться.
Я думаю, что общий случай состоял бы в том, чтобы группировать по столбцам, которые вы рассматриваете, условия, берете минимум "Значение" и присоединяетесь к ним обратно к кадру данных, что дает вам столбец минимального значения, который вы можете использовать для сравнения по ряду... Я не уверен, что могу написать вам пример этого, не видя, что вы на самом деле делаете в более общем примере.