После «цепочки» строк и подсчета последовательных месяцев из файла CSV.Анализ строк в строке Pandas для последовательных дат
В настоящее время я читаю CSV-файл с 5 столбцов, представляющих интерес (на основе страховых полисов):
CONTRACT_ID START-DATE END-DATE CANCEL_FLAG OLD_CON_ID
123456 2015-05-30 2016-05-30 0 8788
123457 2014-03-20 2015-03-20 0 12000
123458 2009-12-20 2010-12-20 0 NaN
...
Я хочу, чтобы подсчитать количество последовательных месяцев контракта цепь идет на.
Пример: Принимая START-DATE
от договора на «фронте» цепи (самый старый контракт) и END-DATE
от конца цепи (самый новый контракт). Старейший контракт определяется либо до аннулированным контрактом в цепочке, либо аннулированным контрактом OLD_CON_ID
.
Каждая строка представляет собой контракт, а prev_Con_ID указывает на предыдущий идентификатор контракта. Желаемый результат - это количество месяцев, в течение которых договорные цепочки возвращаются до разрыва (т. Е. У клиента не было контракта в течение определенного периода времени). Если в этом столбце ничего нет, это первый контракт в этой цепочке.
CANCEL_FLAG также должен сократить цепь, поскольку значение 1 означает, что контракт был отменен.
Текущий код подсчитывает количество активных контрактов на каждый год путем редактирования dataframe как так:
df_contract = df_contract[
(df_contract['START_DATE'] <= pd.to_datetime('2015-05-31')) &
(df_contract['END_DATE'] >= pd.to_datetime('2015-05-31')) & (df_contract['CANCEL_FLAG'] == 0)
]
df_contract = df_contract[df_contract['CANCEL_FLAG'] == 0
]
activecount = df_contract.count()
print activecount['CONTRACT_ID']
Вот первые 6 строк кода, в котором я создаю dataframes и настроить значения даты-времени:
file_name = 'EXAMPLENAME.csv'
df = pd.read_csv(file_name)
df_contract = pd.read_csv(file_name)
df_CUSTOMERS = pd.read_csv(file_name)
df_contract['START_DATE'] = pd.to_datetime(df_contract['START_DATE'])
df_contract['END_DATE'] = pd.to_datetime(df_contract['END_DATE'])
Идеальный выход что-то вроде:
FIRST_CONTRACT_ID CHAIN_LENGTH CON_MONTHS
1234567 5 60
1500001 1 4
800 10 180
Thos Затем будут отображаться данные точек данных.
EDIT2: Файл CSV изменен, возможно, теперь будет проще. Вопрос обновлен.
Взял меня слишком долго, чтобы проверить, но он правильно подсчитывает # года нахождения клиента, хотя и не последовательный. Объяснить на примере. Клиент1 имел контракт с 2006 по 2008 год, затем с 2010 по 2015 год. Код должен вернуть 5, а не 9. – VorpalBunnie
Также я отредактировал исходный вопрос из-за изменения с оригинальным CSV-файлом. Надеюсь, это облегчит понимание (и выполнение). – VorpalBunnie