Python 用最近(以前)的时间填充多索引数据框空小时数

Python 用最近(以前)的时间填充多索引数据框空小时数,python,pandas,Python,Pandas,我有一个具有以下结构的数据帧: 时间 单位 产品类型 总销售额 2021-01-31 06:00:00+00:00 阿迪达斯 鞋 20 2021-01-31 05:00:00+00:00 阿迪达斯 鞋 13 2021-01-31 03:00:00+00:00 阿迪达斯 鞋 4. 2021-01-31 03:00:00+00:00 耐克 鞋 5. 2021-01-31 02:00:00+00:00 阿迪达斯 鞋 3. 2021-01-31 02:00:00+00:00 耐克 鞋 3. 首先,我们需

我有一个具有以下结构的数据帧:

时间 单位 产品类型 总销售额 2021-01-31 06:00:00+00:00 阿迪达斯 鞋 20 2021-01-31 05:00:00+00:00 阿迪达斯 鞋 13 2021-01-31 03:00:00+00:00 阿迪达斯 鞋 4. 2021-01-31 03:00:00+00:00 耐克 鞋 5. 2021-01-31 02:00:00+00:00 阿迪达斯 鞋 3. 2021-01-31 02:00:00+00:00 耐克 鞋 3.
首先,我们需要确保Time列是datetime列

df['Time']=pd.to_datetime(df['Time'])
然后,我们需要对时间进行上采样,以生成每个
公司
产品类型
的缺失小时数

df=df.groupby(['Company','Product\u type'])。重新采样(on='Time',rule='1H')。sum()。重置索引()
这给了我们

  Company Product_type                      Time  Total_sales
0  Adidas        Shoes 2021-01-31 02:00:00+00:00            3
1  Adidas        Shoes 2021-01-31 03:00:00+00:00            4
2  Adidas        Shoes 2021-01-31 04:00:00+00:00            0
3  Adidas        Shoes 2021-01-31 05:00:00+00:00           13
4  Adidas        Shoes 2021-01-31 06:00:00+00:00           20
5    Nike        Shoes 2021-01-31 02:00:00+00:00            3
6    Nike        Shoes 2021-01-31 03:00:00+00:00            5
然后我们可以用最近的前一小时数据填充零

result=df.sort_值(['Company','Product_type','Time'])。替换(0,np.nan).ffill()
结果是

  Company Product_type                      Time  Total_sales
0  Adidas        Shoes 2021-01-31 02:00:00+00:00          3.0
1  Adidas        Shoes 2021-01-31 03:00:00+00:00          4.0
2  Adidas        Shoes 2021-01-31 04:00:00+00:00          4.0
3  Adidas        Shoes 2021-01-31 05:00:00+00:00         13.0
4  Adidas        Shoes 2021-01-31 06:00:00+00:00         20.0
5    Nike        Shoes 2021-01-31 02:00:00+00:00          3.0
6    Nike        Shoes 2021-01-31 03:00:00+00:00          5.0

df.asfreq('H').ffill()
?这非常有效,解决了发布的问题。但是还有一个问题我忘了提。如果今天是2021-02-05,没有更多可用数据,该怎么办?我仍然希望用一个值填充最后一个日期和当前日期之间的所有小时。有没有一个简单的方法来添加它?太好了。如果答案已解决,请将答案标记为已接受?RE:另一个问题,请开始一个新的问题,以澄清您的意图,以及期望的输出等,我会看一看。谢谢。Thanls@mullinscr新问题在这里: