【发布时间】:2022-01-11 23:35:15
【问题描述】:
我有一个时间序列的数据框,我想获得问题的CLOSE 和SUBMISSION 之间差异的累积和。但是,我希望它仅在 CLOSE 值高于 SUBMISSION 值时减去。以下是数据点(按CLOSE 排序)、预期输出和我尝试的代码:
df = pd.DataFrame({'REF_KEY': [1, 2, 3, 4, 5], 'SUBMISSION': ['2018-08-21', '2018-09-03', '2018-09-07', '2018-09-06', '2018-08-28'], 'CLOSE': ['2018-09-05', '2018-09-12', '2018-09-18', '2018-09-24', '2018-09-27']})
df['CLOSE'] = df['CLOSE'].astype('datetime64[ns]')
df['SUBMISSION'] = df['SUBMISSION'].astype('datetime64[ns]')
对于REF_KEY == 1,ACCUM_DATE_DELTA 应该是:
- ('2018-09-05' - '2018-08-21')的15天差
- ('2018-09-05' - '09-03-2018') 之间相差 2 天
- ('2018-09-05' - '2018-08-28') 之间相差 8 天,达到 26
对于REF_KEY == 2,你会得到:
- ('2018-09-12' - '2018-08-21') 之间相差 22 天
- ('2018-09-12' - '2018-09-03') 之间相差 9 天
- ('2018-09-12' - '2018-09-07')之间有 5 天的差异
- ('2018-09-12' - '2018-09-06')之间有 6 天的差异
- ('2018-09-12' - '2018-08-28')之间相差 15 天
所以对于REF_KEY == 1,你可以看到它的关闭日期之间的差异包括REF_KEY == [3, 4],这是因为CLOSE大于SUBMISSION。因此,我产生了创建CLOSE 日期必须大于SUBMISSION 日期的条件。
df_2 = pd.DataFrame({'REF_KEY': [1, 2, 3, 4, 5],
'SUBMISSION': ['2018-08-21', '2018-09-03', '2018-09-07', '2018-09-06', '2018-08-28'], 'CLOSE': ['2018-09-05', '2018-09-12', '2018-09-18', '2018-09-24', '2018-09-27'], 'ACCUM_DATE_DELTA': [25, 57, 86, 116, 131]})
df_2['CLOSE'] = df['CLOSE'].astype('datetime64[ns]')
df_2['SUBMISSION'] = df['SUBMISSION'].astype('datetime64[ns]')
尝试的代码:
df_2['ACCUM_DATE_DELTA'] = df_2['CLOSE']*len(df_2[df_2['CLOSE'] - df_2['SUBMISSION]]['SUBMISSION'].cumsum()) - df_2[df_2['CLOSE'] - df_2['SUBMISSION]]['SUBMISSION'].cumsum()
【问题讨论】:
标签: python pandas dataframe datetime