Разница во времени в днях на основе указанных условий c в pandas - PullRequest
1 голос
/ 25 января 2020

У меня есть фрейм данных, как показано ниже

Tenancy_ID  Unit_ID           Unit_Create_Date           Tenancy_Start_Date
1           A                 2012-09-06 13:34:15        2012-09-08 11:34:14
2           A                 2012-09-06 13:34:15        2013-04-08 11:34:13
3           B                 2012-09-01 11:34:15        2012-09-21 11:34:15
4           B                 2012-09-01 11:34:15        2012-09-11 11:34:13
5           C                 2012-06-02 13:34:15        2012-09-08 11:34:16
3           C                 2012-06-02 13:34:15        2012-06-21 11:34:15
5           A                 2012-09-09 10:32:17        2012-11-08 11:34:18

Я хотел бы узнать разницу во времени в днях от первой Unit_Create_Date до первой Tenancy_Start_Date для каждой единицы.

Ожидаемый результат:

Unit_ID           Time_Difference_in_Days
A                 2
B                 10
C                 19

Шаги:

Для Unit_ID = A,

Существует два типа Unit_Create_Date, например 2012-09-06 13:34:15 и 2012-09-09 10 : 32: 17 среди них самый ранний (первый) - 2012-09-06 13:34:15.

Аналогично существует три Tenancy_Start_Date для Unit_ID = A, например 2012-09-08 11:34:14, 2013-04-08 11:34:13 и 2012-11-08 11:34:18 одним из самых ранних является 2012-09-08 11: 34: 14.

Таким образом, разница во времени в днях между 2012-09-08 11:34:14 и 2012-09-06 13:34:15 составляет 2.

1 Ответ

1 голос
/ 25 января 2020

Попробуйте с groupby и min после преобразования столбцов в .dt.date

m = (df.assign(Unit_Create_Date = df['Unit_Create_Date'].dt.date
       ,Tenancy_Start_Date=df['Tenancy_Start_Date'].dt.date)
      .groupby('Unit_ID')['Unit_Create_Date','Tenancy_Start_Date'].min())

final = (m['Tenancy_Start_Date'].sub(m['Unit_Create_Date'])
        .dt.days.to_frame('Time_Difference_in_Days').reset_index())

  Unit_ID  Time_Difference_in_Days
0       A                        2
1       B                       10
2       C                       19

Примечание: если столбцы datetime являются dtype объектом, преобразуйте в datetime первый.

...