我有一个包含每小时数据的数据框:
area date hour output
H1 2018-07-01 07:00:00 150
H1 2018-07-01 08:00:00 150
H1 2018-07-01 09:00:00 100
H1 2018-07-01 11:00:00 150
H2 2018-07-01 09:00:00 100
H2 2018-07-01 10:00:00 50
H2 2018-07-01 11:00:00 50
H2 2018-07-01 12:00:00 150
但是数据只包含输出小时数的行,如何用输出 0 填充每个区域的缺失小时数?例如为 H1 添加两行:
area date hour output
H1 2018-07-01 10:00:00 0
H1 2018-07-01 12:00:00 0
我可以假设所有区域的最小和最大小时是样本期的开始和结束(在本例中为 7:00:00 和 12:00:00)
现在,我正在创建一个数据框,其中包含每个区域从 7:00 到 12:00 的所有时间,然后将我的数据与该数据框合并,然后用 0 填充 NaN。这非常慢,因为我的数据集可能有数百万行。
有没有更好的方法来做到这一点?
最佳答案
您可以创建最小值和最大值的日期范围,并将数据框与现有的数据框合并,并使用 null 填充值
df
area date hour output
0 H1 2018-07-01 07:00:00 07:00:00 150
1 H1 2018-07-01 08:00:00 08:00:00 150
2 H1 2018-07-01 09:00:00 09:00:00 100
6 H2 2018-07-01 11:00:00 11:00:00 50
7 H2 2018-07-01 12:00:00 12:00:00 150
df = pd.DataFrame(pd.date_range(pd.to_datetime(df['date'] +' ' + df['hour']).min(),pd.to_datetime(df['date'] +' ' + df['hour']).max(),freq='H'),columns= ['date']).merge(df,on=['date'],how='outer').fillna(0)
df.hour = df.date.dt.strftime('%H:%M:%S')
df.date = df.date.dt.strftime('%d-%m-%Y')
df
出去:
date area hour output
0 01-07-2018 H1 07:00:00 150.0
1 01-07-2018 H1 08:00:00 150.0
2 01-07-2018 H1 09:00:00 100.0
3 01-07-2018 0 10:00:00 0.0
4 01-07-2018 H2 11:00:00 50.0
5 01-07-2018 H2 12:00:00 150.0
关于python - 填写 Pandas 数据框中缺少的小时数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52409712/