我有一个完整的数据集,其中包含在被接受之前会经历各种状态的项目,许多项目会不止一次地通过同一状态,我想查找某项产品在状态中所花费的平均时间,如果重新计算则从0重新开始在以后输入相同的状态)。具体来说,我希望能够选择一个时间点,并查看在该状态下花费的平均总时间。
开始使用reindex
和填充选项时,这似乎很简单,该选项将中间日期/缺失日期与项目在该日期具有的值一起填充。但是我有很多项目和更改是在同一天发生的,所以我不确定是否可以为此使用日期索引。
因此,我认为我的问题与this one不同,因为我有多个数据点处于同一时间点,所以我的问题与here不同。除非少了我的误解,否则我不能为此使用日期索引吗?我的时间在sec级别以下,也许我可以在此级别使用日期索引,但是那时我将拥有一个庞大的数据集。还有其他方法吗?
我在这里有一个示例数据集:
id Old Status New Status Status In Status Out
0 44 Draft Submit 2018-10-24 08:12:02 2018-10-24 18:12:02
1 44 Sumbit Return 2018-10-24 18:12:02 2018-11-24 08:56:02
2 44 Return Reject 2018-11-24 08:56:02 NaN
3 88 Submit Accept 2018-10-24 10:12:02 2018-10-29 13:17:02
4 88 Accept Develop 2018-10-29 13:17:02 NaN
5 90 Draft Submit 2018-12-30 08:43:12 NaN
6 95 Draft Reject 2019-01-24 06:12:02 Na
Status Out
是NaN
的地方,那么它目前处于该状态。
以项目44
为例,在第0
行和第1
行之间,我希望在10月24日至11月24日之间的所有日期都等于在0
行上。
我的数据在下面也采用这种格式,实际上可能更易于使用。
df1 = pd.DataFrame({'id':[44,44,44,88,88,90,95],
'Old Status': ['Draft','Submit','Return','Submit','Accept',
'Draft','Draft'],
'New Status' : ['Submit','Return','Reject','Accept','Develop',
'Submit','Reject'],
'Datetime': ['2018-10-24 08:12:02',
'2018-10-24 18:12:02', '2018-11-24 08:56:02',
'2018-10-24 10:12:02','2018-10-29 13:17:02',
'2018-12-30 08:43:12', '2019-01-24 06:12:02']
}, columns = ['id','Old Status', 'New Status', 'Datetime'])
df1['Datetime'] = pd.to_datetime(df1['Datetime'])
df1
id Old Status New Status Datetime
0 44 Draft Submit 2018-10-24 08:12:02
1 44 Sumbit Return 2018-10-24 18:12:02
2 44 Return Reject 2018-11-24 08:56:02
3 88 Submit Accept 2018-10-24 10:12:02
4 88 Accept Develop 2018-10-29 13:17:02
5 90 Draft Submit 2018-12-30 08:43:12
6 95 Draft Reject 2019-01-24 06:12:02
编辑:
因此,为了确认一下,我的数据集有278个重复的日期索引时间降到了“ s
”级别。因此,除非我进入'ns
'级别,否则似乎无法使用日期索引方法,因为出现错误ValueError: cannot reindex from a duplicate axis
使用ns
并不理想,因为仅容纳278个,就会多创建几百万行。
如何在不使用日期索引的情况下添加缺少日期的新行?