0

我有一个具有不同 id 和可能重叠时间的数据框,时间步长为 0.4 秒。我想以 0.8 秒的时间步长重新采样每个 id 的平均速度。

    time  id  speed
0    0.0   1      0
1    0.4   1      3
2    0.8   1      6
3    1.2   1      9
4    0.8   2     12
5    1.2   2     15
6    1.6   2     18

可以通过以下代码创建一个示例

x = np.hstack((np.array([1] * 10), np.array([3] * 15)))
a = np.arange(10)*0.4
b = np.arange(15)*0.4 + 2
t = np.hstack((a, b))

df = pd.DataFrame({"time": t, "id": x})
df["speed"] = pd.DataFrame(np.arange(25) * 3)

timedatetime通过以下方式转换为类型

df["re_time"] = pd.to_datetime(df["time"], unit='s')

4

1 回答 1

0

尝试使用 groupby:

block_size = int(0.8//0.4)

blocks = df.groupby('id').cumcount() // block_size

df.groupby(['id',blocks]).agg({'time':'first', 'speed':'mean'})

输出:

      time  speed
id               
1  0   0.0    1.5
   1   0.8    7.5
   2   1.6   13.5
   3   2.4   19.5
   4   3.2   25.5
3  0   2.0   31.5
   1   2.8   37.5
   2   3.6   43.5
   3   4.4   49.5
   4   5.2   55.5
   5   6.0   61.5
   6   6.8   67.5
   7   7.6   72.0
于 2021-02-18T16:18:26.323 回答