CustID UsageDate EnergyConsumed
0 17111 2018-01-01 00:00:00 1.095
1 17111 2018-01-01 01:00:00 1.129
2 17111 2018-01-01 02:00:00 1.165
3 17111 2018-01-01 03:00:00 1.833
4 17111 2018-01-01 04:00:00 1.697
5 17111 2018-01-01 05:00:00 1.835
missing data point 1
6 17111 2018-01-01 07:00:00 1.835
7 17112 2018-01-01 00:00:00 1.095
8 17112 2018-01-01 01:00:00 1.129
missing data point 1
9 17112 2018-01-01 03:00:00 1.833
10 17112 2018-01-01 04:00:00 1.697
11 17112 2018-01-01 05:00:00 1.835
对于每个客户,我都有每小时的数据。但是,中间缺少一些数据点。我想检查最小和最大的使用日期,并填写该时间间隔内丢失的使用日期(所有值均为每小时),能耗为零。我可以稍后使用ffill或回填来处理此问题。你知道吗
并非每个客户的最大使用日期都是2018-01-31 23:00:00。所以我们只想延长到每个客户的最长日期。你知道吗
缺失点1替换为
17111 2018-01-01 06:00:00 0
缺失点2替换为
17112 2018-01-01 02:00:00 0
我的主要问题是如何找到每个客户的最短和最长日期,然后生成日期间隔。你知道吗
我试过按日期索引和重新采样,但没有帮助我找到解决方案。你知道吗
另外,我想知道是否有一种方法可以直接找到在上述模式中缺少值的customerID。我的数据非常大,@Vaishali提供的解决方案计算量很大。任何输入都会有帮助!你知道吗
您可以按custid对Dataframe进行分组,并创建具有所需日期范围的索引。现在使用这个索引来重新索引数据
说明:由于Usagedates必须是该CustID的最小和最大日期范围内的所有日期,因此我们按CustID对数据进行分组,并使用date\u range创建一系列最小和最大日期。将日期设置为系列的索引,而不是值。groupby的结果将是一个多索引,CUSTID为级别0,usage date为级别1。我们现在使用这个多索引来重新索引原始数据帧。它将使用索引匹配的值,在其余部分赋值为NaN。最后使用fillna将NaN转换为0。你知道吗
首先创建} :
DatetimeIndex
,然后在apply
中使用^{也可以使用参数
ffill
或bfill
:相关问题 更多 >
编程相关推荐