在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] })
我有一个类似的数据集。它看起来像: 我想在0重复次数最长的地方剪切,所以我想在索引18处剪切,但我想保留索引14-16不变。到目前为止,我已经尝试过以下方法:在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风格和优雅
- 计数器
- 我还尝试了一个字典,但我不确定如何使用ItErrors比较上一个值和下一个值
- 我还一次取X行的滚动平均值,如果它为零,那么我得到一个索引。但后来我被困在实际推断指数的范围。或者找到最长的零序列
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