在数据集中分割

天河

我正在寻找一种算法来解析0s(表示False)和99s(表示True)列表中的变量,以将它们分为2类。该列表实质上指示了另一个列表中的值是否超过某个阈值,如下图1所示。

我想获得类别1的值的列表,其中包含检测到的第一个99s分段和之后的每个99s备用分段。而类别2的值列表将包含检测到的99s的第2个初始段和此后的99s的每个备用段。作为示例,下面的图2和图3是我想要获得的Category 1和Category 2值。您可能会找到我的代码来复制下面的图。

图1:

在此处输入图片说明

图2:

在此处输入图片说明

图3:

在此处输入图片说明

df = pd.DataFrame(np.random.uniform(50,100,size=(100, 1)))
df2 = pd.DataFrame(np.random.uniform(50,100,size=(100, 1)))
zeros1 = pd.DataFrame(np.zeros(80))
zeros2 = pd.DataFrame(np.zeros(50))
zeros3 = pd.DataFrame(np.zeros(150))
zeros4 = pd.DataFrame(np.zeros(80))
zeros5 = pd.DataFrame(np.zeros(50))
df3 = pd.DataFrame(np.random.uniform(50,100,size=(100, 1)))
df4 = pd.DataFrame(np.random.uniform(50,100,size=(100, 1)))
df5=pd.concat([zeros1, df, zeros2, df2, zeros3, df3, zeros4, df4, zeros5 ], ignore_index=True)
times = pd.date_range('2012-10-01', periods=len(df5), freq='1min')
df6 = pd.concat([pd.DataFrame(times), df5], axis = 1, ignore_index=True)

segment = []

for i in range(0,len(df6)):
    if df6.iloc[i,1]> 50:
        segment.append(99)
    else:
        segment.append(0)
        
plt.plot(df6[0], df6[1])
plt.plot(df6[0], segment, color = 'r')
plt.xticks(rotation='vertical')
plt.show()
斯蒂夫

此代码将遍历0和99的列表,并记下每个99序列的开始和结束,并根据其奇偶性将其存储在其他列表中:

def get_alternate_segments(l):
  state_v,state_p = (0,0) # cycling through states (0,0), (99,0), (0,1), (99,1)
  segments = ([],[])
  for i,v in enumerate(l):
    if state_v == 0:
      if v == 99:
        start = i
        state_v = 99
    elif state_v == 99:
      if v == 0:
        end = i
        segments[state_p].append((start, end))
        state_v = 0
        state_p = 1 - state_p
  if state_v == 99:
    end = len(l)
    segments[state_p].append((start, end))
  return segments

测验

>>> l = [0,99,99,99,0,0,99,99,0,0,0,99,0,99,0,99,99,99]
>>> get_alternate_segments(l)
([(1, 4), (11, 12), (15, 18)], [(6, 8), (13, 14)])

它是如何工作的?我们要记住,由于variable,我们当前看到的是0还是99 s state_v我们还要记住,由于variable,我们当前是否看到了偶数或奇数段state_p

  • 当一个99段开始时,我们记下i作为段开始的值
  • 当一个99区段末端,我们注意到的值i作为该段的结尾,我们存储段作为一对(start, end)进入segment[0]segment[1]取决于奇偶校验。

请注意,(start, end)索引与python的范围和列表切片约定一致。,从start包括到end排除。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在数据框中分割日期和时间

来自分类Dev

在数据集中查找数据

来自分类Dev

选择Oracle中分组集中的最新数据

来自分类Dev

在数据 R 中分配子组

来自分类Dev

变量在数据集中多次出现的概率

来自分类Dev

在数据收集中解析 SNMP STRING

来自分类Dev

预测值不在数据集中

来自分类Dev

在数据集中过滤“因子”类型的列?

来自分类Dev

从分组数据集中随机分割数据

来自分类Dev

在python中分割大数据文件

来自分类Dev

根据字符位置在Excel中分割数据

来自分类Dev

在R中分组和分割数据帧

来自分类Dev

计算面板数据集中分类变量的更改次数

来自分类Dev

在数据框的列中分离值并融化

来自分类Dev

按组划分列(在数据框中分组)

来自分类Dev

在数据帧中分配时,因子变为整数

来自分类Dev

在数据帧的单列中分解分类变量向量?

来自分类Dev

如何在数据框中分类值

来自分类Dev

按组划分列(在数据框中分组)

来自分类Dev

AngularJS在数据集中显示最大重现属性

来自分类Dev

在数据集中查找具有特定值的列的索引

来自分类Dev

使用Shiny Inputs在数据集中创建新变量

来自分类Dev

在数据集中获取行计数为零

来自分类Dev

重复在数据集中有用吗?

来自分类Dev

在数字数据集中查找“异常值”

来自分类Dev

使用字典在数据集中查找条目

来自分类Dev

将混合模型的结果保存在数据集中

来自分类Dev

LightGBM'在数据集中使用categorical_feature。警告?

来自分类Dev

根据条件在数据集中创建新行