pandas - 转换包含时间序列的数据框
问题描述
我有这样的数据框:
datestamp Name Reading
2018-01-01 00:00:00 A01 40
2018-01-01 01:00:00 A01 50
2018-01-01 03:00:00 A01 50
2018-01-01 01:00:00 A02 50
2018-01-01 02:00:00 A02 40
2018-01-01 03:00:00 A02 30
给定开始和结束日期(开始 =2018-01-01 00:00:00
和结束 = 2018-01-01 05:00:00
)
我想将数据框转换为下面。(对于所有缺失的条目,我们需要有零或 NULL)
输出如:
datestamp Name Reading
2018-01-01 00:00:00 A01 40
2018-01-01 01:00:00 A01 50
2018-01-01 02:00:00 A01 00
2018-01-01 03:00:00 A01 50
2018-01-01 04:00:00 A01 00
2018-01-01 05:00:00 A01 00
2018-01-01 00:00:00 A02 00
2018-01-01 01:00:00 A02 50
2018-01-01 02:00:00 A02 40
2018-01-01 03:00:00 A02 30
2018-01-01 04:00:00 A02 00
2018-01-01 05:00:00 A02 00
我没有方向,所以目前还没有办法。
解决方案
使用 pd.date_range()、df.loc[] 和嵌套的 for 循环:
df
datestamp Name Reading
0 2018-01-01 00:00:00 A01 40
1 2018-01-01 01:00:00 A01 50
2 2018-01-01 02:00:00 A01 50
3 2018-01-01 03:00:00 A02 50
4 2018-01-01 04:00:00 A02 40
5 2018-01-01 05:00:00 A02 30
start_date = dt.datetime.strptime('2018-01-01 00:00:00', '%Y-%m-%d %H:%M:%S')
end_date = dt.datetime.strptime('2018-01-01 05:00:00', '%Y-%m-%d %H:%M:%S')
date_range = pd.date_range(start=start_date, end=end_date, freq='H')
for date in date_range:
for sensor in df.Name.unique():
if len(df.loc[(df['datestamp'] == date) & (df['Name'] == sensor)]) == 0:
df=df.append({'datestamp':date, 'Name':sensor, 'Reading':0}, ignore_index=True)
df = df.sort_values(by=['Name', 'datestamp']).reset_index(drop=True)
df
datestamp Name Reading
0 2018-01-01 00:00:00 A01 40
1 2018-01-01 01:00:00 A01 50
2 2018-01-01 02:00:00 A01 50
3 2018-01-01 03:00:00 A01 0
4 2018-01-01 04:00:00 A01 0
5 2018-01-01 05:00:00 A01 0
6 2018-01-01 03:00:00 A02 50
7 2018-01-01 04:00:00 A02 40
8 2018-01-01 05:00:00 A02 30
9 2018-01-01 00:00:00 A02 0
10 2018-01-01 01:00:00 A02 0
11 2018-01-01 02:00:00 A02 0
请原谅列标题。
推荐阅读
- c++ - Windows 中 -fpermssive 标志的替代方法是什么(Visual Studio)
- javascript - Facebook 分享按钮当前 URL
- excel - Excel - 如果多个非连续列包含值是,我想返回真值。但我也希望它忽略空白单元格
- vb.net - 如何在我的 vb 代码中将 psiphon-tunnel-core.exe 作为后台进程运行?
- python - 如何(正确)在 Kubernetes 上部署 MongoDB 并从另一个 Pod/Job 访问它?
- javascript - 如何仅使用 Pure JS 而不是使用任何库或框架在分页中添加分页数字之间的点?
- image-processing - 是否可以在不将图像渲染到屏幕的情况下收集 pygame 游戏板的图像矩阵?
- postgresql - Can psql output a description of all tables, but only tables?
- latex - 一个接一个地显示向量的条目
- javascript - 如何设置条件以从 Javascript 对象中删除属性?