我有一个表,其中的列是
['datetime', 'sensorid', 'sms-in', 'sms-out', 'call-in', 'call-out']
,总共有 10,000 个传感器。理想情况下,每个时间戳有 10,000 行。但是,某些时间戳可能会缺少传感器行(例如,只有 9998 行)。
桌子可能看起来像
sms-in sms-out call-in call-out
datetime sensorid
2013-10-31 23:00:00 1 0.223227 0.156787 0.160938 0.052275
2 0.222201 0.147617 0.164946 0.054712
3 0.221109 0.137855 0.169213 0.057306
4 0.226198 0.183349 0.149327 0.045216
5 0.205065 0.175393 0.139139 0.043455
... ... ... ... ...
2013-11-01 22:50:00 9996 0.695404 0.440369 0.087566 0.310581
9997 0.687958 0.429974 0.085995 0.243143
9998 0.687958 0.429974 0.085995 0.256862
9999 0.894907 0.518741 0.085995 0.230476
10000 1.212911 0.638219 0.085995 0.090769
[1439982 rows x 4 columns]
让最后 4 列
['sms-in', 'sms-out', 'call-in', 'call-out']
成为 sensor
的特征。让 T
和 N
分别代表时间戳轴和传感器ID 轴。
如何将 DataFrame 转换为形状为
(T, N, 4)
的 numpy 数组?我尝试了一种非常简单的方法来迭代收集行,这是非常低效的。有没有 Pandas API 或简洁的方法来完成这样的工作?
假设您的数据框名为 df。您可以执行以下操作:
array = df.values.reshape(T, N, 4)