Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 我已经在这上面呆了一段时间了。我试图找到一个值(在下面的例子中是138)和它后面的下一个0_Pandas_Data Analysis - Fatal编程技术网

Pandas 我已经在这上面呆了一段时间了。我试图找到一个值(在下面的例子中是138)和它后面的下一个0

Pandas 我已经在这上面呆了一段时间了。我试图找到一个值(在下面的例子中是138)和它后面的下一个0,pandas,data-analysis,Pandas,Data Analysis,所以我尝试将一个模式整为[138,0],并在列中查找它,它可以工作,但跳过了一些值,其中138后面没有直接跟0。(如上例所示)有什么方法可以做到这一点吗 TimeStamp Value 2014-12-19 12:41:54 0 2014-12-19 13:10:44 138 2014-12-19 13:12:45 0 2014-12-19 21:03:09 4 2014-12-20 04:53:29 138 2014-12-20

所以我尝试将一个模式整为[138,0],并在列中查找它,它可以工作,但跳过了一些值,其中138后面没有直接跟0。(如上例所示)有什么方法可以做到这一点吗

     TimeStamp         Value
2014-12-19 12:41:54     0
2014-12-19 13:10:44     138
2014-12-19 13:12:45     0
2014-12-19 21:03:09     4
2014-12-20 04:53:29     138
2014-12-20 12:43:54     6
2014-12-20 13:12:46     0

Desired Output

    TimeStamp         Value
2014-12-19 13:10:44     138
2014-12-19 13:12:45     0
2014-12-20 04:53:29     138
2014-12-20 13:12:46     0


仅第一个过滤器
138
0
值通过以下方式:

然后过滤
[138,0]
模式,以获得与
&
相等的链,以获得按位和:

如果需要每个日期的测试模式,请仅与以下分组一起使用:

pattern = [138,0] 
matched = pd.DataFrame(Data["Value"].rolling(len(pattern)).apply(lambda x: all(np.equal(x, pattern))))
matched = matched.sum(axis = 1).astype(bool)  
idx_matched = np.where(matched)[0]
subset = [range(match-len(pattern)+1, match+1) for match in idx_matched]
result = pd.concat([Data.iloc[subs,:] for subs in subset], axis = 0)
df = df[df['Value'].isin([138, 0])]
m1 = df['Value'].eq(138) & df['Value'].shift(-1).eq(0)
m2 = df['Value'].eq(0) & df['Value'].shift().eq(138)
df = df[m1 | m2]
print (df)
             TimeStamp  Value
1  2014-12-19 13:10:44    138
2  2014-12-19 13:12:45      0
4  2014-12-20 04:53:29    138
6  2014-12-20 13:12:46      0
m1 = df['Value'].eq(138) & df.groupby(df['TimeStamp'].dt.date)['Value'].shift(-1).eq(0)
m2 = df['Value'].eq(0) & df.groupby(df['TimeStamp'].dt.date)['Value'].shift().eq(138)
df = df[m1 | m2]
print (df)
            TimeStamp  Value
1 2014-12-19 13:10:44    138
2 2014-12-19 13:12:45      0
4 2014-12-20 04:53:29    138
6 2014-12-20 13:12:46      0