熊猫在列中查找序列或模式

Pyt*_*_DK 7 python sequence dataframe pandas

以下是我正在处理的问题的一些示例数据:

index     Quarter    Sales_Growth
0          2001q1    0
1          2002q2    0
2          2002q3    1
3          2002q4    0
4          2003q1    0
5          2004q2    0
6          2004q3    1
7          2004q4    1
Run Code Online (Sandbox Code Playgroud)

Sales_Growth专栏告诉我该季度是否确实有销售增长。0 = 无增长,1 = 增长。

首先,Quarter当连续两个季度没有销售增长时,我试图返回第一个。

有了上面的数据,这个答案就是2001q1.

然后,我想返回在最初两个季度没有增长之后发生的连续第二个季度的销售增长。

这个问题的答案是2004q4

我已经搜索过但我能找到的最接近的答案我无法上班:https : //stackoverflow.com/a/26539166/3225420

我是熊猫初学者。

Joh*_*nck 8

你在做子序列匹配。这有点奇怪,但请耐心等待:

growth = df.Sales_Growth.astype(str).str.cat()
Run Code Online (Sandbox Code Playgroud)

这给你:

'00100011'
Run Code Online (Sandbox Code Playgroud)

然后:

growth.index('0011')
Run Code Online (Sandbox Code Playgroud)

给你 4(显然你会添加一个常量 3 来获取与模式匹配的最后一行的索引)。

我觉得这种方法开始有点难看,但最终结果确实有用——您可以搜索任何固定模式而无需额外编码。


lan*_*tar 5

对于第一季度:

temp = df.Sales_Growth + df.Sales_Growth.shift(-1)
df[temp == 0].head(1)
Run Code Online (Sandbox Code Playgroud)

对于 Q2:

df[(df.Sales_Growth == 1) & (df.Sales_Growth.shift(1) == 1) & (df.Sales_Growth.shift(2) == 0) & (df.Sales_Growth.shift(3) == 0)].head(1)
Run Code Online (Sandbox Code Playgroud)