【发布时间】:2015-09-16 15:15:45
【问题描述】:
按照行的“链”并从 CSV 文件中计算连续月份。
目前我正在阅读一个包含 5 列感兴趣的 CSV 文件(基于保险单):
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 指向前一个合约 ID。期望的输出是合约链可以追溯到多少个月直到出现间隙(即客户在一段时间内没有合约)。如果该列中没有任何内容,则这是该链中的第一个合约。
CANCEL_FLAG 也应该切断链,因为值为 1 表示合约被取消。
当前代码通过像这样编辑数据框来计算每年的活跃合约数量:
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 行代码:
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
然后将这些数据点绘制成图表。
EDIT2:CSV 文件已更改,现在可能更容易。问题已更新。
【问题讨论】: