【问题标题】:Pattern identification in a dataset using python使用python在数据集中进行模式识别
【发布时间】:2020-04-24 18:21:30
【问题描述】:

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

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

如我们所见,我们有 6 名员工,索引 1 表示他们当天在场。我想使用 Python 编写一个代码,以便我可以跟踪 2 次连续缺勤,即模式 0 ,0 代表第 i 天,第 i+1 天,从该人开始工作开始的 6 天时间范围内。

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

但是,对于员工 3(列:day_2 到 day_7)、员工 6(列: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 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

【问题讨论】:

    标签: python-3.x pandas numpy dataframe pattern-matching


    【解决方案1】:

    用 idxmcx 和 for 循环检查

    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]
    

    【讨论】:

      猜你喜欢
      • 2015-12-06
      • 2019-03-21
      • 2011-06-30
      • 2023-03-17
      • 2018-03-28
      • 2017-03-11
      • 2017-02-14
      • 2011-05-09
      • 1970-01-01
      相关资源
      最近更新 更多