Пометьте последнюю строку для данного идентификатора, квартала и порядка набора данных, Pandas - PullRequest
0 голосов
/ 17 сентября 2018

В настоящее время у меня есть набор данных заказов на продажу, в котором каждый номер заказа разделен на лоты.Таким образом, для каждого ordernumber может быть несколько строк.Другие соответствующие столбцы - это счет id и заказ quarter (т. Е. 2018Q2).Для каждого данного id в каждом данном quarter я хочу применить флаг к всем лотам последнего order в пределах данного заданного quarter для данногоid с использованием Pandas / Python.Любой совет?

Снимок кадра данных с Last_Order, работающим только с последней строкой последнего order из quarter для данного id.На данный момент есть:

 index     id       quarter ordernumber lotnumber1  Last Order
441670  10176228    2015Q2  0108595504  12947-1      0
441211  10176228    2015Q2  0108663905  12947-1      0
450008  10176228    2015Q2  0108663905  129161       0
440268  10176228    2015Q2  0108779992  12987-1      0
448187  10176228    2015Q2  0108779992  12848-1      0
439085  10176228    2015Q2  0108895691  12987-1      0
446123  10176228    2015Q2  0108895691  12965-1      1
419419  10176228    2015Q3  0109003405  12969-1      0
429893  10176228    2015Q3  0109003405  12987-1      0
426850  10176228    2015Q3  0109241988  13929        1

Итак: номер заказа 0108895691 имеет два лота (12965-1 и 12987-1);у обоих должно быть 1 в столбце Last Order.

Любой совет?

1 Ответ

0 голосов
/ 17 сентября 2018

IIUC, используйте duplicated на отсортированном фрейме данных:

df['Last Order'] = (df['ordernumber'].isin(df.loc[~df.duplicated(['id','quarter'], 
                                    keep='last'),'ordernumber']).astype(int))

Выход:

     index        id quarter  ordernumber lotnumber1  Last Order
0  441670  10176228  2015Q2    108595504    12947-1           0
1  441211  10176228  2015Q2    108663905    12947-1           0
2  450008  10176228  2015Q2    108663905     129161           0
3  440268  10176228  2015Q2    108779992    12987-1           0
4  448187  10176228  2015Q2    108779992    12848-1           0
5  439085  10176228  2015Q2    108895691    12987-1           1
6  446123  10176228  2015Q2    108895691    12965-1           1
7  419419  10176228  2015Q3    109003405    12969-1           0
8  429893  10176228  2015Q3    109003405    12987-1           0
9  426850  10176228  2015Q3    109241988      13929           1

ИЛИ

df['Last Order'] = (~df.duplicated(['id','quarter'], keep='last')).astype(int)

df['Last Order'] = df.groupby(['id','quarter','ordernumber'], as_index=False)['Last Order'].transform('max')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...