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

У меня есть фрейм данных, содержащий столбец 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 и условие = B, когда:

-условие = B

-счет <= 3 </p>

-хотя бы одно значение <5 </p>

Желаемый результат:

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)

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

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

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

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

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

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

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

0 голосов
/ 18 октября 2018

Попробуйте:

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

Сейчасэто как и ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...