Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.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中,如何通过数字的最长重复来拆分序列? df=pd.DataFrame({ 'label':[f“subject{i}”表示范围(28)内的i], ‘数据’:[i代表范围(1,14)内的i]+[1,0,0,0,2]+[0,0,0,0,0,0,0,0] })_Python_Pandas_Dataframe_Dataset - Fatal编程技术网

在python中,如何通过数字的最长重复来拆分序列? df=pd.DataFrame({ 'label':[f“subject{i}”表示范围(28)内的i], ‘数据’:[i代表范围(1,14)内的i]+[1,0,0,0,2]+[0,0,0,0,0,0,0,0] })

在python中,如何通过数字的最长重复来拆分序列? df=pd.DataFrame({ 'label':[f“subject{i}”表示范围(28)内的i], ‘数据’:[i代表范围(1,14)内的i]+[1,0,0,0,2]+[0,0,0,0,0,0,0,0] }),python,pandas,dataframe,dataset,Python,Pandas,Dataframe,Dataset,我有一个类似的数据集。它看起来像: 我想在0重复次数最长的地方剪切,所以我想在索引18处剪切,但我想保留索引14-16不变。到目前为止,我已经尝试过以下方法: 计数器 我还尝试了一个字典,但我不确定如何使用ItErrors比较上一个值和下一个值 我还一次取X行的滚动平均值,如果它为零,那么我得到一个索引。但后来我被困在实际推断指数的范围。或者找到最长的零序列 编辑:我的一位朋友提出了以下逻辑,它给出了与@shubham sharma相同的结果。海报的解决方案更具python风格和优雅

我有一个类似的数据集。它看起来像:

我想在0重复次数最长的地方剪切,所以我想在索引18处剪切,但我想保留索引14-16不变。到目前为止,我已经尝试过以下方法:

  • 计数器
  • 我还尝试了一个字典,但我不确定如何使用ItErrors比较上一个值和下一个值
  • 我还一次取X行的滚动平均值,如果它为零,那么我得到一个索引。但后来我被困在实际推断指数的范围。或者找到最长的零序列
编辑:我的一位朋友提出了以下逻辑,它给出了与@shubham sharma相同的结果。海报的解决方案更具python风格和优雅

def查找最长的零(df):
'''
查找最长重复次数(500次)的索引:
切割[实验室]=idx
og_df_sof=og_df_sof.append(temp_df)
cut_df_sof=cut_df_sof.append(temp_df.iloc[:idx,:]))

我们可以使用布尔掩蔽来识别零块,然后使用
count
对这些块进行
groupby
变换,然后获得具有最大连续零的块的起始索引

m = df['data'].eq(0)
idx = m[m].groupby((~m).cumsum()).transform('count').idxmax()


太神了我用我们提出的代码编辑了我的OP,但这在两行中做了相同的事情。在另一个线程中,我想了解一下为什么我们的代码会得到相似但不同的结果。我使用这个解决方案为将来的读者编辑了OP的全部代码。谢谢@shubham sharma@sc4s2cg让我们讨论
* But obviously that won't work since the indices will be rewritten at each occurrance of zero. 
m = df['data'].eq(0)
idx = m[m].groupby((~m).cumsum()).transform('count').idxmax()
print(idx)

18