Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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
Python 3.x 使用python在数据集中进行模式识别_Python 3.x_Pandas_Numpy_Dataframe_Pattern Matching - Fatal编程技术网

Python 3.x 使用python在数据集中进行模式识别

Python 3.x 使用python在数据集中进行模式识别,python-3.x,pandas,numpy,dataframe,pattern-matching,Python 3.x,Pandas,Numpy,Dataframe,Pattern Matching,我有一个看起来像这样的数据框: empl_ID day_1 day_2 day_3 day_4 day_5 day_6 day_7 day_8 day_9 day_10 1 1 1 1 1 1 1 0 1 1 1 2 0 0 1 1 1 1 1 1 1 0 3

我有一个看起来像这样的数据框:

empl_ID day_1  day_2  day_3  day_4  day_5  day_6  day_7  day_8  day_9  day_10
 1        1      1      1      1      1      1      0      1      1      1
 2        0      0      1      1      1      1      1      1      1      0
 3        0      1      0      0      1      1      1      1      1      1
 4        1      0      1      0      1      1      1      0      1      0
 5        1      0      0      1      1      1      1      1      1      1
 6        0      0      0      0      1      1      1      1      1      1
empl_ID day_1 day_2 day_3 day_4 day_5 day_6 day_7 day_8 day_9 day_10 label
 1        1     1     1     1     1     1     0     1     1     1      0
 2        0     0     1     1     1     1     1     1     1     0      0
 3        0     1     0     0     1     1     1     1     1     1      1
 4        1     0     1     0     1     1     1     0     1     0      0
 5        1     0     0     1     1     1     1     1     1     1      1
 6        0     0     0     0     1     1     1     1     1     1      0
正如我们可以看到的,我们有6名员工,索引1表示他们当天的存在。我想用Python编写一个代码,这样我就可以跟踪2次连续缺勤,即模式0,第一天为0,第一天为1+1,时间范围为6天,从员工开始工作开始算起

例如,员工1从day_1列开始工作,这是他第一次出现1。因此,从第1天到第6天的列中,如果我们没有观察到任何连续的0,0,则该记录应标记为“0”。员工2(cols:day_3至day_8)、员工4(cols:day_1至day_6)和员工6(cols:day_5至day_10)的情况也是如此,它们将被标记为“0”

但是,对于员工3(cols:day_2至day_7)、员工6(cols:day_5至day_10),他们在各自的时间范围内第一次出现1时就包含0,0模式,因此将标记为“1”

如果有人能帮助我制定一套代码来实现上述目标,那将非常有帮助。提前谢谢

结果应该如下所示:

empl_ID day_1  day_2  day_3  day_4  day_5  day_6  day_7  day_8  day_9  day_10
 1        1      1      1      1      1      1      0      1      1      1
 2        0      0      1      1      1      1      1      1      1      0
 3        0      1      0      0      1      1      1      1      1      1
 4        1      0      1      0      1      1      1      0      1      0
 5        1      0      0      1      1      1      1      1      1      1
 6        0      0      0      0      1      1      1      1      1      1
empl_ID day_1 day_2 day_3 day_4 day_5 day_6 day_7 day_8 day_9 day_10 label
 1        1     1     1     1     1     1     0     1     1     1      0
 2        0     0     1     1     1     1     1     1     1     0      0
 3        0     1     0     0     1     1     1     1     1     1      1
 4        1     0     1     0     1     1     1     0     1     0      0
 5        1     0     0     1     1     1     1     1     1     1      1
 6        0     0     0     0     1     1     1     1     1     1      0

使用idxmcx检查,并使用shift检查循环

s=df.set_index('empl_ID')
idx=s.columns.get_indexer(s.idxmax(1))
l=[(s.iloc[t, x :y].eq(s.iloc[t, x :y].shift())&s.iloc[t, x :y].eq(0)).any() for t , x ,y in zip(df.index,idx,idx+5)]
df['Label']=l
df
   empl_ID  day_1  day_2  day_3  day_4  ...  day_7  day_8  day_9  day_10  Label
0        1      1      1      1      1  ...      0      1      1       1  False
1        2      0      0      1      1  ...      1      1      1       0  False
2        3      0      1      0      0  ...      1      1      1       1   True
3        4      1      0      1      0  ...      1      0      1       0  False
4        5      1      0      0      1  ...      1      1      1       1   True
5        6      0      0      0      0  ...      1      1      1       1  False
[6 rows x 12 columns]