我有一个从 2016/1/1 00:00 到 2018/11/25 23:00 的数据框 (named df),每小时都有一个时间戳,object_id 和一个值。数据集仅包含 object_id 具有值的行。
timestampHour object_id value
2016/1/1 00:00 1 2
2016/1/1 00:00 3 1
2016/1/1 01:00 1 1
2016/1/1 01:00 2 3
2016/1/1 02:00 2 3
2016/1/1 02:00 3 2
我想获得一个显示每小时所有对象 ID 的数据框,如果没有值,则为空值。
timestampHour object_id value
2016/1/1 00:00 1 2
2016/1/1 00:00 2 null
2016/1/1 00:00 3 1
2016/1/1 01:00 1 1
2016/1/1 01:00 2 3
2016/1/1 01:00 3 null
2016/1/1 02:00 1 null
2016/1/1 02:00 2 3
2016/1/1 02:00 3 2
我已经根据时间戳创建了日期时间。并使用以下代码将它们四舍五入到小时:
df["timestamp"] = pd.to_datetime(df["result_timestamp"])
df['timestampHour'] = df['result_timestamp'].dt.round('60min')
(我不知道是否有更好的选择,但我一直在尝试创建 timestampHour 行直到 12(我有 12 个每个唯一的 object_id)并用(那个小时的)未使用的 object_id 填充那些新创建的行。但是我无法根据条件创建空行)
我对编程还很陌生,我没有找到通过搜索其他帖子来更接近解决这个问题的线索。
最佳答案
使用pivot_table
和unstack
:
df.pivot_table(
index='object_id', columns='timestampHour', values='value'
).unstack().rename('value').reset_index()
timestampHour object_id value
0 2016/1/1 00:00 1 2.0
1 2016/1/1 00:00 2 NaN
2 2016/1/1 00:00 3 1.0
3 2016/1/1 01:00 1 1.0
4 2016/1/1 01:00 2 3.0
5 2016/1/1 01:00 3 NaN
6 2016/1/1 02:00 1 NaN
7 2016/1/1 02:00 2 3.0
8 2016/1/1 02:00 3 2.0
要了解其工作原理,中间的 pivot_table
有助于查看:
timestampHour 2016/1/1 00:00 2016/1/1 01:00 2016/1/1 02:00
object_id
1 2.0 1.0 NaN
2 NaN 3.0 3.0
3 1.0 NaN 2.0
找不到 object_id
和 timestampHour
组合的值时,NaN
被添加到 table 。当您使用 unstack
时,这些 NaN
将被保留,从而为您提供包含缺失值的所需结果。
关于python - 为数据框中的每个 ID 创建一个日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53636745/