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

时间:2018-10-30 10:48:50

标签: python pandas

本质:

这是Find particular pattern in a pandas dataframe的后续问题,但是现在我没有在寻找固定模式。那么如何定义特定的开始和结束的模式/时间段,并据此子集熊猫数据帧?

详细信息:

假设您有此数据框:

trim()

假设您要查找的模式在$rows = explode(PHP_EOL, $str); foreach ($rows as $row){ $rowParts = explode(':', $row); $fieldName = trim($rowParts[0]); $fieldValue = trim($rowParts[1]); } 中以 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 开头,并在同一列中以[107, 100]结尾(ColB只是为了说明它是一个数据帧,不是系列)。在不知道它们之间有多少观察值的情况下,如何对数据框进行子集化?

所需的输出:

ColA

我知道如何使用嵌套的for循环以简单的方式执行此操作,但是我希望其中一些人能找到更优雅的解决方案。谢谢您的任何建议!

1 个答案:

答案 0 :(得分:1)

对于几个值,可以使用pd.Series.shift。您将需要额外的逻辑来说明在{em>之前 idx2发生的idx1,并概括出任意相邻的值。

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