我有一个数据框,可以确认一天中不同时间收到的车辆的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 reindex dates in Groupby不同,我每小时每小时都有多行,除了有些小时根本没有行。
答案 0 :(得分:0)
在最新版本的熊猫中进行了测试,将hour
列转换为具有所有可能类别的类别,然后在没有loop
的情况下进行汇总:
df['hour'] = pd.Categorical(df['timestamp'].dt.hour, categories=range(24))
df1 = df.groupby(['id','imo','hour']).median().reset_index()