Pandas:为每个组重新采样每小时数据
Pandas: Resampling Hourly Data for each Group
我有一个数据框,其中包含一天中不同时间接收到的车辆的 GPS 位置。对于每辆车,我想重新采样每小时的数据,以便我得到一天中每个小时的中值报告(根据时间戳)。对于没有相应行的时间,我想要一个空行。
我正在使用以下代码:
for i,j in enumerate(list(df.id.unique())):
data=df.loc[df.id==j]
data['hour']=data['timestamp'].hour
data_grouped=data.groupby(['imo','hour']).median().reset_index()
data = data_grouped.set_index('hour').reindex(idx).reset_index() #idx is a list of integers from 0 to 23.
由于我的数据框有数百万个 ID,因此我需要花费大量时间来遍历所有这些 ID。有没有有效的方法来做到这一点?
与 不同,我每个小时都有多行,此外有些小时根本没有行。
在 pandas 的最新版本中测试,将 hour
列转换为具有所有可能类别的分类,然后在没有 loop
的情况下进行聚合:
df['hour'] = pd.Categorical(df['timestamp'].dt.hour, categories=range(24))
df1 = df.groupby(['id','imo','hour']).median().reset_index()
我有一个数据框,其中包含一天中不同时间接收到的车辆的 GPS 位置。对于每辆车,我想重新采样每小时的数据,以便我得到一天中每个小时的中值报告(根据时间戳)。对于没有相应行的时间,我想要一个空行。 我正在使用以下代码:
for i,j in enumerate(list(df.id.unique())):
data=df.loc[df.id==j]
data['hour']=data['timestamp'].hour
data_grouped=data.groupby(['imo','hour']).median().reset_index()
data = data_grouped.set_index('hour').reindex(idx).reset_index() #idx is a list of integers from 0 to 23.
由于我的数据框有数百万个 ID,因此我需要花费大量时间来遍历所有这些 ID。有没有有效的方法来做到这一点?
与
在 pandas 的最新版本中测试,将 hour
列转换为具有所有可能类别的分类,然后在没有 loop
的情况下进行聚合:
df['hour'] = pd.Categorical(df['timestamp'].dt.hour, categories=range(24))
df1 = df.groupby(['id','imo','hour']).median().reset_index()