查找具有定义的开始和结束,但长度未知的模式

2024-04-26 01:01:31 发布

您现在位置:Python中文网/ 问答频道 /正文

本质:

这是Find particular pattern in a pandas dataframe的后续问题,但现在我不寻找固定的模式。那么,如何定义一个模式/时间段的特定开始和结束,并根据它来子集一个数据帧呢?你知道吗

细节:

假设您有这个数据帧:

            ColA  ColB
Dates                 
2017-07-07   103    92
2017-07-08    92    96
2017-07-09   107   109
2017-07-10   100    91
2017-07-11    90   107
2017-07-12   105    99
2017-07-13    90   104
2017-07-14    90   105
2017-07-15   109   104
2017-07-16    94    90

假设您正在寻找的模式以ColA中的[107, 100]开始,以同一列中的[90, 109]结束(ColB只是用来说明它是一个数据帧而不是一个序列)。在不知道数据帧之间有多少个观测值的情况下,如何对数据帧进行子集划分?你知道吗

所需输出:

            ColA  ColB
Dates                 
2017-07-09   107   109
2017-07-10   100    91
2017-07-11    90   107
2017-07-12   105    99
2017-07-13    90   104
2017-07-14    90   105
2017-07-15   109   104

我知道如何使用嵌套for循环以一种基本的方式实现这一点,但我希望你们中的一些人有一个更优雅的解决方案。谢谢你的建议!你知道吗


Tags: 数据indataframepandas定义模式find子集
1条回答
网友
1楼 · 发布于 2024-04-26 01:01:31

对于几个值,可以使用^{}。您将需要额外的逻辑来解释在idx1之前发生的idx2,并对任意相邻值进行泛化。你知道吗

idx1 = (df['ColA'].eq(107) & df['ColA'].shift(-1).eq(100)).idxmax()
idx2 = (df['ColA'].shift().eq(90) & df['ColA'].eq(109)).idxmax()

print(df.loc[idx1: idx2])

            ColA  ColB
Dates                 
2017-07-09   107   109
2017-07-10   100    91
2017-07-11    90   107
2017-07-12   105    99
2017-07-13    90   104
2017-07-14    90   105
2017-07-15   109   104

相关问题 更多 >