Создайте столбец данных на основе значений в другом столбце в той же строке и в строке назад. - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть датафрейм df, где выглядит голова:

        BB       DATE         PX
0  1333 JP 2014-03-04   471300.0       
1  1333 JP 2014-04-04   132900.0       
2  1333 JP 2014-04-07   150400.0       
3  1333 JP 2014-04-13   191900.0       
4  2345 JP 2014-04-14   218900.0       

Я хотел бы создать новый столбец с именем скажем FLAG, который устанавливается с использованием 2 условий 1. Взгляните на столбец с именем BB и для каждой строки возьмите текущее значение, посмотрите на предыдущий день и сравните значения. Если значения одинаковы

и

  1. Если абсолютная разница между текущей DATE и вчерашней датой больше 3

Затем установите FLAG = 1, в противном случае установите FLAG = 0

Поэтому в этом примере новый столбец FLAG будет выглядеть как

        BB       DATE         PX  FLAG
0  1333 JP 2014-03-04   471300.0     0  
1  1333 JP 2014-04-04   132900.0     1  
2  1333 JP 2014-04-07   150400.0     0  
3  1333 JP 2014-04-13   191900.0     1  
4  2345 JP 2014-04-14   218900.0     0

Если индекс равен 1, вы можете видеть значение BB в этой строке и для предыдущей строки одинаковые, но абсолютная разница между DATE для двух строк больше 3. То же самое верно и для индекса = 3.

Я пробовал:

 if df.BB.shift(1) = df.BB.shift(0) & abs(df.DATE.shift(1) - df.DATE.shift(0)) >3 :
    df['FLAG'] = 1 
    else:
    df['FLAG'] = 0

Но не могу заставить его работать.

1 Ответ

0 голосов
/ 02 ноября 2018

Предположим, что ваш столбец DATE представляет собой объект даты и времени pandas, один вкладыш:

df['FLAG'] = ((df['BB'].shift(1)==df['BB']) & (df['DATE'].diff()>pd.Timedelta(days=3))).astype(int)

Выход:

       BB       DATE        PX  FLAG
0  1333JP 2014-03-04  471300.0     0
1  1333JP 2014-04-04  132900.0     1
2  1333JP 2014-04-07  150400.0     0
3  1333JP 2014-04-13  191900.0     1
4  2345JP 2014-04-14  218900.0     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...