Как применить оконную функцию в Python? - PullRequest
0 голосов
/ 31 августа 2018

Ниже приведен пример фрейма данных: - т. Е. Идентификатор, имя для другого года и кватер с другим значением

id name year quater value 
1  bn   2017 2
1  bn   2017 3     4.5
1  bn   2017 4
2  an   2018 1     2.3   
2  an   2018 2     3.3
2  an   2018 3     4.5

Я должен определить, если имя + идентификатор (первичный ключ) ранее появлялся в году и в кватере, у которого есть значение, обрабатывает его как существующий (0), а если в будущем есть значение и ничего до этого, то обрабатывает его как новый (1).

id name year quater value status
1  bn   2017 2            1
1  bn   2017 3     4.5    0
1  bn   2017 4            0
2  an   2018 1     2.3    1 
2  an   2018 2     3.3    0
2  an   2018 3     4.5    0

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Вы можете использовать duplicated с подмножеством идентификатора, имени и года, а затем инвертировать результат для определения первого вхождения ..., например:

df['status'] = (~df.duplicated(subset=['id', 'name', 'year'])).astype(int)

Дает вам:

   id name  year  quater  value  status
0   1   bn  2017       2    NaN       1
1   2   an  2018       1    2.3       1
2   2   an  2018       2    3.3       0
3   2   an  2018       3    4.5       0

Обратите внимание, что, хотя это будет работать с вашими данными, упорядоченными в том виде, в котором они представлены, вы можете отсортировать их по годам (и, возможно, кварталу), чтобы убедиться, что ваши флаги состояния перемещаются в течение того же года и в первый квартал, видимый соответствующим образом.

0 голосов
/ 31 августа 2018

Я считаю нужным duplicated с инвертированной логической маской ~ и приведением к integer:

df['status'] = (~df['name'].duplicated()).astype(int)
#if multiple columns
#df['status'] = (~df.duplicated(['id','name'])).astype(int)
print (df)
   id name  year  quater  value  status
0   1   bn  2017       2    NaN       1
1   2   an  2018       1    2.3       1
2   2   an  2018       2    3.3       0
3   2   an  2018       3    4.5       0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...