Как найти средний месяц между двумя датами? - PullRequest
0 голосов
/ 29 января 2019

Мне нужно найти среднее значение месяца между двумя датами в рамке даты.Я упрощаю дело, показывая четыре примера.

import pandas as pd
import numpy as np
import datetime
df=pd.DataFrame([["1/31/2016","3/1/2016"],
                 ["6/15/2016","7/14/2016"],
                 ["7/14/2016","8/15/2016"], 
                 ["8/7/2016","9/6/2016"]], columns=['FromDate','ToDate'])

df['Month'] = df.ToDate.dt.month-df.FromDate.dt.month

Я пытаюсь добавить столбец, но не получаю желаемого результата.Мне нужно увидеть эти значения: [2,6,7,8].

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Вам необходимо преобразовать строку в datetime перед использованием dt.month.Эта строка вычисляет среднее число месяцев:

df['Month']   = (pd.to_datetime(df['ToDate']).dt.month +
                 pd.to_datetime(df['FromDate']).dt.month)//2
print(df)
    FromDate     ToDate  Month
0  1/31/2016   3/1/2016      2
1  6/15/2016  7/14/2016      6
2  7/14/2016  8/15/2016      7
3   8/7/2016   9/6/2016      8

Это работает только с обеими датами в одном и том же году.

Решение jpp подходит, но в некоторых случаях дает неправильный ответ:

["01.01.2016", "01.03.2016"] можно ожидать 2, потому что февраль - это период с января по март, но jpp даст 1, соответствующий январю.

0 голосов
/ 29 января 2019

Вы можете вычислить среднюю дату явно, добавив половину timedelta между 2 датами к более ранней дате.Затем просто извлеките месяц:

# convert to datetime if necessary
df[df.columns] = df[df.columns].apply(pd.to_datetime)

# calculate mean date, then extract month
df['Month'] = (df['FromDate'] + (df['ToDate'] - df['FromDate']) / 2).dt.month

print(df)

    FromDate     ToDate  Month
0 2016-01-31 2016-03-01      2
1 2016-06-15 2016-07-14      6
2 2016-07-14 2016-08-15      7
3 2016-08-07 2016-09-06      8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...