Lidando com valores None ao usar o Pandas Groupby e Apply with a Function

eu tenho umDataframe noPandas com uma letra e duas datas como colunas. Gostaria de calcular os dias úteis entre as duas colunas de data da linha anterior usandoshift(), desde que oLetter o valor é o mesmo (usando um.groupby()) Eu estava fazendo isso com.apply(). Isso funcionou até eu passar alguns dados nos quais faltava uma das datas. Mudei tudo para uma função para lidar com o valor que faltava com umtry/except , mas agora minha função retornaNaN para tudo. Parece que oNone O valor de data está impactando cada chamada da função, enquanto eu pensaria que só faria isso quando oLetter de.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

Saída real:

  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

Saída desejada:

  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

questionAnswers(1)

yourAnswerToTheQuestion