gpt4 book ai didi

python - 提取大于指定大小的连续值组

转载 作者:太空宇宙 更新时间:2023-11-04 02:09:07 26 4
gpt4 key购买 nike

我正在尝试在数据框中查找是否至少有 X 个连续操作(我已经包含一个“Filter_OK”列来计算该行是否符合条件),然后提取该组行。

      TRN     TRN_DATE          FILTER_OK  
0 5153 04/04/2017 11:40:00 True
1 7542 04/04/2017 17:18:00 True
2 875 04/04/2017 20:08:00 True
3 74 05/04/2017 20:30:00 False
4 9652 06/04/2017 20:32:00 True
5 965 07/04/2017 12:52:00 True
6 752 10/04/2017 17:40:00 True
7 9541 10/04/2017 19:29:00 True
8 7452 11/04/2017 12:20:00 True
9 9651 12/04/2017 13:57:00 False

对于这个例子,如果我正在寻找 4 个操作。
期望的输出:

    TRN     TRN_DATE    FILTER_OK  
4 9652 06/04/2017 20:32:00 True
5 965 07/04/2017 12:52:00 True
6 752 10/04/2017 17:40:00 True
7 9541 10/04/2017 19:29:00 True
8 7452 11/04/2017 12:20:00 True

我怎样才能对我需要的操作进行子集化?

最佳答案

您可以使用 cumsum 执行此操作,然后是 groupbytransform:

v = (~df.FILTER_OK).cumsum()
df[v.groupby(v).transform('size').ge(4) & df['FILTER_OK']]

TRN TRN_DATE FILTER_OK
4 9652 2017-06-04 20:32:00 True
5 965 2017-07-04 12:52:00 True
6 752 2017-10-04 17:40:00 True
7 9541 2017-10-04 19:29:00 True
8 7452 2017-11-04 12:20:00 True

详情
首先,使用 cumsum 将行分隔成组:

v = (~df.FILTER_OK).cumsum()
v

0 0
1 0
2 0
3 1
4 1
5 1
6 1
7 1
8 1
9 2
Name: FILTER_OK, dtype: int64

接下来,找到每个组的大小,然后计算出哪些组至少有 X 行(在您的例子中是 4 行):

v.groupby(v).transform('size')

0 3
1 3
2 3
3 6
4 6
5 6
6 6
7 6
8 6
9 1
Name: FILTER_OK, dtype: int64

v.groupby(v).transform('size').ge(4)

0 False
1 False
2 False
3 True
4 True
5 True
6 True
7 True
8 True
9 False
Name: FILTER_OK, dtype: bool

并且此掩码带有“FILTER_OK”以确保我们只获取符合条件的有效行。

v.groupby(v).transform('size').ge(4) & df['FILTER_OK']

0 False
1 False
2 False
3 False
4 True
5 True
6 True
7 True
8 True
9 False
Name: FILTER_OK, dtype: bool

关于python - 提取大于指定大小的连续值组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54010386/

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