Работа с значениями 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