Работа с значениями None при использовании Pandas Groupby и применение с функцией

у меня естьDataframe вPandas с буквой и двумя датами в виде столбцов. Я хотел бы рассчитать рабочие дни между двумя столбцами даты для предыдущей строки, используяshift()при условии, чтоLetter значение одинаково (используя.groupby()). Я делал это с.apply(), Это работало, пока я не передал некоторые данные, в которых отсутствовала одна из дат. Я переместил все в функцию для обработки пропущенного значения сtry/except предложение, но теперь моя функция возвращаетNaN За все. Похоже,None значение для даты влияет на каждый вызов функции, тогда как я думаю, что это будет сделано только тогда, когдаLetter от.groupby() являетсяA.

import pandas as pd
from datetime import datetime
import numpy as np

def business_days(x):
    try:
      return pd.DataFrame(np.busday_count(x['First Date'].tolist(), x['Last Date'].tolist())).shift().reset_index(drop=True)
    except ValueError:
        return None

df = pd.DataFrame(data=[['A', datetime(2016, 1, 7), None],
                        ['A', datetime(2016, 3, 1), datetime(2016, 3, 8)],
                        ['B', datetime(2016, 5, 1), datetime(2016, 5, 10)],
                        ['B', datetime(2016, 6, 5), datetime(2016, 6, 7)]],
                  columns=['Letter', 'First Date', 'Last Date'])

df['First Date'] = df['First Date'].apply(lambda x: x.to_datetime().date())
df['Last Date'] = df['Last Date'].apply(lambda x: x.to_datetime().date())

df['Gap'] = df.groupby('Letter').apply(business_days)

print df

Фактический выход:

  Letter  First Date   Last Date  Gap
0      A  2016-01-07         NaT  NaN
1      A  2016-03-01  2016-03-08  NaN
2      B  2016-05-01  2016-05-10  NaN
3      B  2016-06-05  2016-06-07  NaN

Желаемый результат:

  Letter   First Day    Last Day   Gap
0      A  2016-01-07         NAT  NAN
1      A  2016-03-01  2016-03-08  NAN
2      B  2016-05-01  2016-05-10  NAN
3      B  2016-06-05  2016-06-07  7

Ответы на вопрос(1)

Ваш ответ на вопрос