Панды: проверьте, соответствует ли какое-либо из значений в подмножестве столбца условию

1

У меня есть 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)

но никто из них не работает. Вы можете мне помочь? Спасибо :)

  • 0
    Это одно значение меньше 5 должно быть больше нуля? Кроме того, если ваш B с номером 2 имел значение 12, но все остальное осталось прежним, то будут ли ваши столбцы ошибок такими же, как в вашем вопросе?
Теги:
pandas

2 ответа

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

Теперь это как и ожидалось.

  • 2
    Это не проверяет условие «хотя бы одно значение <5»
  • 1
    Спасибо, но где условие "если любое значение <5"? кажется, ваш код просто назначает 1 для счетчика <= 3 и условия = B
Показать ещё 10 комментариев
0

Я не уверен, что правильно понимаю ваше использование, но это может сработать для вас

mask = ((df['condition'] == 'B') & (df['count'] <= 5))

if df.loc[mask, 'Value'].min() < 5:
    df.loc[mask, 'Error'] = 1

Трудно сказать, что вы устанавливаете значения в одной строке на основе группы строк. Я не очень доволен этим ответом, потому что для многих случаев использования он не будет масштабироваться.

Я думаю, что общий случай состоял бы в том, чтобы группировать по столбцам, которые вы рассматриваете, условия, берете минимум "Значение" и присоединяетесь к ним обратно к кадру данных, что дает вам столбец минимального значения, который вы можете использовать для сравнения по ряду... Я не уверен, что могу написать вам пример этого, не видя, что вы на самом деле делаете в более общем примере.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню