首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫在栏中找到顺序或图案

熊猫在栏中找到顺序或图案
EN

Stack Overflow用户
提问于 2017-03-02 12:04:11
回答 3查看 9.8K关注 0票数 8

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

代码语言:javascript
复制
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

Sales_Growth专栏告诉我,该季度的销售额是否确实出现了增长。0=无增长,1=增长。

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

根据上面的数据,这个答案将是2001q1

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

这个问题的答案是2004q4

我已经搜索过,但最接近的答案是我找不到工作:https://stackoverflow.com/a/26539166/3225420

我是潘达斯的初学者。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-02 12:32:53

你在做子序列匹配。这有点奇怪,但请原谅我:

代码语言:javascript
复制
growth = df.Sales_Growth.astype(str).str.cat()

这给了你:

代码语言:javascript
复制
'00100011'

然后:

代码语言:javascript
复制
growth.index('0011')

给出4(很明显,您会添加一个常量3来获得与模式匹配的最后一行的索引)。

我觉得这种方法一开始有点难看,但是最终结果是有用的--你可以在没有额外编码的情况下搜索任何固定的模式。

票数 9
EN

Stack Overflow用户

发布于 2017-03-02 12:18:03

对于Q1:

代码语言:javascript
复制
temp = df.Sales_Growth + df.Sales_Growth.shift(-1)
df[temp == 0].head(1)

对于Q2:

代码语言:javascript
复制
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)
票数 7
EN

Stack Overflow用户

发布于 2017-03-02 20:54:25

以先前的答案为基础。Q1:

代码语言:javascript
复制
temp = df.Sales_Growth.rolling_apply(window=2, min_periods=2, \
    kwargs={pattern: [0,0]}, func=lambda x, pattern: x == pattern)
print(df[temp==1].head())

在rolling_apply调用中,windowmin_periods必须匹配传递给rolling_apply函数的模式列表的长度。

Q2:相同的方法,不同的模式:

代码语言:javascript
复制
temp = df.Sales_Growth.rolling_apply(window=4, min_periods=4, \
    kwargs={pattern: [0,0,1,1]}, func=lambda x, pattern: x == pattern)
print(df[temp==1].head())
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42555031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档