我有跨越多天的时间序列数据,我需要对其进行排序(即,每次值更改时创建一列)。我在没有groupby的情况下进行了排序,但我对如何将相同或相似的代码应用于分组数据有点困惑。
我的数据看起来像:
index timestamp value
0 1684713605000 1
1 1684713610000 1
2 1684713611000 1
3 1684713614000 0
4 1684713615000 0
5 1684713616000 0
6 1684713619000 1
7 1684713620000 1
8 1684713621000 1
9 1684832896000 1
10 1684832897000 1
11 1684832898000 1
12 1684832901000 0
13 1684832902000 0
14 1684832903000 0
15 1684832906000 1
16 1684832907000 1
17 1684832908000 1
我的timestamp
列不能保证是连续的,但通常是一天中每秒一条记录。我需要我想要的sequence
列递增直到一天结束,然后在第二天从0开始再次计数。
我用来排序的代码是:
subset = df[["value"]].copy()
subset["change"] = (subset["value"].shift() != subset["value"]) * 1
subset["seq"] = subset["change"].cumsum(axis = 0) - 1
df["seq"] = subset["seq"]
我已经能够创建组与:
subset = df[["timestamp", "value"]].copy()
subset["date"] = pd.to_datetime(subset["timestamp"], unit="ms", origin="unix").dt.date
g = subset.groupby("date")
但我不知道该怎么办。我希望得到的结果是一个序列列,它在每次value
更改时递增,但会重置
index timestamp value seq
0 1684713605000 1 0
1 1684713610000 1 0
2 1684713611000 1 0
3 1684713614000 0 1
4 1684713615000 0 1
5 1684713616000 0 1
6 1684713619000 1 2
7 1684713620000 1 2
8 1684713621000 1 2
9 1684832896000 1 0 <-- first record of a new day
10 1684832897000 1 0
11 1684832898000 1 0
12 1684832901000 0 1
13 1684832902000 0 1
14 1684832903000 0 1
15 1684832906000 1 2
16 1684832907000 1 2
17 1684832908000 1 2
1条答案
按热度按时间smdncfj31#
尝试:
图纸: