Python / Pandas / Data Frame / Рассчитать разницу в дате - PullRequest
0 голосов
/ 08 июня 2018

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

def calculate_planungsphase(audit, phase1, phase2):

datum_first_milestone = data_audit[(data_audit.Audit == audit) & (data_audit.Meilenstein == phase1)]
datum_second_milestone = data_audit[(data_audit.Audit == audit) & (data_audit.Meilenstein == phase2)]

print(datum_first_milestone['GeplantesErledigungsdatum'])
print(datum_second_milestone['GeplantesErledigungsdatum'])

print(datum_first_milestone['GeplantesErledigungsdatum'] - datum_second_milestone['GeplantesErledigungsdatum'])

Результат печати (datum_first_milestone ['GeplantesErledigungsdatum']) =

2018-01-01 Имя: GeplantesErledigungsdatum, dtype: datetime64 [нс]

Результат печати (datum_second_milestone ['GeplantesErledigungsdatum']) =

2018-01-02 Имя:GeplantesErledigungsdatum, dtype: datetime64 [нс]

Результат расчета разницы:

0 NaT 1 NaT Имя: GeplantesErledigungsdatum, dtype: timedelta64 [нс

Почему результат расчета NaT?И почему у меня два результата, когда я делаю только один расчет?(Индекс 0 и Индекс 1 = NaT)

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 08 июня 2018

Существует проблема с различными значениями индекса, поэтому в вычитании Series не выровнены.

Возможное решение, если оба размера отфильтрованы Series, это создать одинаковые значения индекса:

datum_first_milestone.index = datum_second_milestone.index

Также решение должно быть упрощено, если необходимо отфильтровать только столбец по loc + column name:

datum_first_milestone = data_audit.loc[(data_audit.Audit == audit) & (data_audit.Meilenstein == phase1), 'GeplantesErledigungsdatum']
datum_second_milestone = data_audit.loc[(data_audit.Audit == audit) & (data_audit.Meilenstein == phase2), 'GeplantesErledigungsdatum']

print(datum_first_milestone)
print(datum_second_milestone)

и если всегда возвращается одно значение Series.item возвращать скаляры:

print (datum_first_milestone.item() - datum_second_milestone.item())

Более общее, если возможно одно или несколько значений, выберите первое значение для скаляров:

print (datum_first_milestone.iat[0] - datum_second_milestone.iat[0])
...