Pandas Dataframe 按周期拆分

jxct1oxe  于 2024-01-04  发布在  其他
关注(0)|答案(1)|浏览(90)

我有一个pandas Dataframe ,用于记录给定一天中单个公交路线的停靠站和预定时间。我想将其拆分为多个帧,每个帧对应于给定公交车的单个行程(仅基于stop周期,而不是scheduled周期发生的时间)。
例如,下面有两个A->B->C行程,所以看看如何分割帧(即:在这种情况下索引为3),使每个子帧具有相同的停止序列。

import pandas as pd
df = pd.DataFrame({
    "scheduled": ["2023-05-25 13:00", "2023-05-25 13:15", "2023-05-25 13:45", "2023-05-25 14:35", "2023-05-25 14:50", "2023-05-25 15:20"],
    "stop": ["A", "B", "C", "A", "B", "C"]
})
pd.to_datetime(df["scheduled"])

字符串

5rgfhyps

5rgfhyps1#

假设你不知道你有多少个止损点,但是模式总是重复,你可以与第一个名字进行比较,每次找到这个止损点时递增,然后使用groupby进行分割:

group = df['stop'].eq(df['stop'].iloc[0]).cumsum()

out = [g for _,g in df.groupby(group)]

字符串
输出量:

[  scheduled stop
 0   1:00 pm    A
 1   1:15 pm    B
 2   1:45 pm    C,
   scheduled stop
 3   2:35 pm    A
 4   2:50 pm    B
 5   3:20 pm    C]


中间体组号:

scheduled stop  group
0   1:00 pm    A      1
1   1:15 pm    B      1
2   1:45 pm    C      1
3   2:35 pm    A      2
4   2:50 pm    B      2
5   3:20 pm    C      2


其他选项,计算唯一停靠点的数量(nunique),并使用此值与numpy.array_split进行拆分:

import numpy as np

n = df['stop'].nunique()
out = np.array_split(df, range(n, len(df), n))

相关问题