gpt4 book ai didi

python - 在 Pandas 中查找时间序列数据中某个值出现的最后一个序列

转载 作者:行者123 更新时间:2023-12-03 21:54:07 25 4
gpt4 key购买 nike

我有 10 天的每分钟时间序列数据,包含三列:time stamp , category , alarm .给定一个日期,我想 groupby类别并找到 timestamps在给定日期之前连续将闹钟设置为 1 并为其创建 dataframe从这个子集。

   'Category'       'Date'              'Alarm'
0 A 1999-11-10 12:01:00 1
1 A 1999-11-10 12:02:00 1
2 A 1999-11-10 12:03:00 1
3 A 1999-11-10 12:04:00 1
4 A 1999-11-10 12:05:00 0
5 A 1999-11-10 12:06:00 0
.
.
.
1101 A 1999-11-13 10:07:00 1
1102 A 1999-11-13 10:08:00 1
1103 A 1999-11-13 10:09:00 1
1104 B 1999-11-23 13:09:00 0
1105 B 1999-11-23 13:10:00 0
1106 B 1999-11-23 13:11:00 1
1107 B 1999-11-23 13:12:00 1
1108 B 1999-11-23 13:13:00 1
1109 B 1999-11-23 13:14:00 0
.
.
.
.
2110 B 1999-11-26 13:13:00 0
2110 B 1999-11-26 13:14:00 0
2110 B 1999-11-26 13:15:00 1
2111 B 1999-11-26 13:16:00 1
2112 B 1999-11-26 13:17:00 1
2113 B 1999-11-26 13:18:00 1
2114 B 1999-11-26 13:19:00 1
2115 B 1999-11-26 13:20:00 0
2116 B 1999-11-26 13:21:00 0
2117 C 1999-12-02 17:11:00 1
.
.
.

我希望输出是一个只有这些行的新数据框:
     'Category'       'Date'              'Alarm'
1101 A 1999-11-13 10:07:00 1
1102 A 1999-11-13 10:08:00 1
1103 A 1999-11-13 10:09:00 1
2110 B 1999-11-23 13:15:00 1
2111 B 1999-11-23 13:16:00 1
2112 B 1999-11-23 13:17:00 1
2113 B 1999-11-23 13:18:00 1
2114 B 1999-11-23 13:19:00 1

即每组中最后一个连续序列为1的报警行。
我尝试过的:
df.groupby('category')['alarm'].apply(lambda x: x==1)

但这给出了所有警报为 1 的行,而不仅仅是连续 1 的最后一个序列。有关如何获得此值的任何说明表示赞赏。谢谢! :)

编辑 1:我只是提供了数据帧的一个子集。最后一个连续的 1 序列可以在任意天数之前出现(例如,如果时间序列是从 11 月 1 日到 11 月 10 日,对于一个类别,最后一个连续的 1 可能已经发生在 11 月 2 日或 11 月 8 日。而且 1 的长度也可能有所不同。

最佳答案

咱们试试吧

# convert to datetime type
df.Date = pd.to_datetime(df.Date)

# blocks of consecutive `1`:
s = (1-df.Alarm).cumsum()*df.Alarm

# last group of `1` within Category and day:
last_groups = s.groupby(df.Category).transform('max')

# output:
df[s==last_groups]

输出:
     Category                Date  Alarm
1101 A 1999-11-13 10:07:00 1
1102 A 1999-11-13 10:08:00 1
1103 A 1999-11-13 10:09:00 1
2110 B 1999-11-26 13:15:00 1
2111 B 1999-11-26 13:16:00 1
2112 B 1999-11-26 13:17:00 1
2113 B 1999-11-26 13:18:00 1
2114 B 1999-11-26 13:19:00 1
2117 C 1999-12-02 17:11:00 1

关于python - 在 Pandas 中查找时间序列数据中某个值出现的最后一个序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62104373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com