Pandas сводная таблица по столбцу DATE - PullRequest
0 голосов
/ 08 мая 2020

У меня есть следующий набор данных:

D_DATE       BIN Number   Disposition    Unit Assigned        Disposition ID
2018-01-04    10005      SWO Issued      PLUMBING DIVISION     3456
2016-06-23    10005      SWO Issued      SCAFFOLD UNIT         3467
2016-06-23    10005      SWO Rescinded   SCAFFOLD UNIT         3467
2018-01-17    10005      SWO Rescinded   PLUMBING DIVISION     3456
2019-01-04    10006      SWO Rescinded   BEST SQUAD            3478
2018-12-21    10006      SWO Issued      BEST SQUAD            3478
2020-02-10    10006      SWO Issued      BEST SQUAD            3480  
2020-02-25    10006      SWO Rescinded   BEST SQUAD            3480

df = pd.DataFrame({'D_DATE':['2018-01-04','2016-06-23','2016-06-23','2018-01-17','2019-01-04','2018-12-21','2020-02-10','2020-02-25'],
                        'BIN Number': ['10005', '10005', '10005', '10005', '10006','10006','10006','10006'] ,
                       'Disposition': ['SWO Issued', 'SWO Issued', 'SWO Rescinded', 'SWO Rescinded','SWO Rescinded','SWO Issued','SWO Issued','SWO Rescinded'] ,
                       'Unit Assigned': ['PLUMBING DIVISION', 'SCAFFOLD UNIT', 'SCAFFOLD UNIT', 'PLUMBING DIVISION','BEST SQUAD','BEST SQUAD','BEST SQUAD','BEST SQUAD'],
                       ' Disposition ID':['3456','3467','3467','3456','3478','3478','3480,'3480']}) 

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

Unit Assigned, Issue Date, Rescinded Date, Disposition ID

Затем я хочу рассчитать разницу во времени между датой выдачи и датой отмены. Идентификатор диспозиции уникален. Каждая диспозиция имеет идентификатор в первый раз при выдаче SWO, поэтому при повторной отмене SWO она может следовать за тем же идентификатором.

Выход:

   Unit Assigned      SWO Issued     SWO Rescinded    Time Difference   Disposition ID
    PLUMBING DIVISION  2018-01-04     2018-01-17        13 days          3456
    SCAFFOLD UNIT      2016-06-23     2016-06-23        0 days           3467 
    BEST SQUAD         2018-12-21     2019-01-04        14 days          3478
    BEST SQUAD         2020-02-10     2020-02-25        15 days          3480

Благодарю за любую помощь. Спасибо.

1 Ответ

1 голос
/ 08 мая 2020

Это очень похоже на ваш недавний вопрос, за исключением того, что это проще, поскольку дан Disposition ID.

df['D_DATE'] = pd.to_datetime(df['D_DATE'])

(df.pivot_table(index=[' Disposition ID','BIN Number', 'Unit Assigned'],
              columns='Disposition',
              values='D_DATE',
              aggfunc='first')
   .reset_index()
   .assign(Time_Difference=lambda x: x['SWO Rescinded']-x['SWO Issued'])
)
...