慕虎7371278
找到值等于零的位置,并取长度为 3 的滚动总和。找出滚动总和等于 3 的位置。结果将滞后 2 个空格,因此我们采用结果的 -1 平移和 -2 移位版本的结果的逻辑。ormask = df['value'].eq(0).rolling(3).sum().eq(3)mask |= mask.shift(-2) | mask.shift(-1)为了得到组,我取逻辑否定的累积和。对于每个非零值,这将递增,并停滞在零处。但是,每组零将不同。在我使用 时,这并不重要,因为我将使用首字母来仅查看首先满足条件的行。groupbymask但是,生成的组将是一组非连续的整数。因为我不喜欢这样,所以我曾经给这些组提供从零开始的唯一整数值。factorizegrp_masked = (~mask).cumsum()[mask].factorize()[0]g = df[mask].groupby(grp_masked)保存文件for grp, d in g: d.to_csv(f'df_{grp}.csv', index=False)创建词典df_dict = {grp: d for grp, d in g}详这将显示原始数据帧以及显示我们计算的一些内容的其他列。group_series = pd.Series( grp_masked, df.index[mask], pd.Int64Dtype())df_ = df.assign( EqZero=df['value'].eq(0), Roll2=df['value'].eq(0).rolling(3).sum(), Is3=df['value'].eq(0).rolling(3).sum().eq(3), Shift=lambda d: d.Is3.shift(-2) | d.Is3.shift(-1), Mask=mask, PreGrp=(~mask).cumsum(), Grp=group_series)df_ date value EqZero Roll2 Is3 Shift Mask PreGrp Grp0 2/10/19 34 False NaN False False False 1 <NA>1 2/11/19 0 True NaN False False False 2 <NA>2 2/12/19 0 True 2.0 False False False 3 <NA>3 2/13/19 34 False 2.0 False False False 4 <NA>4 2/14/19 34 False 1.0 False False False 5 <NA>5 2/15/19 34 False 0.0 False False False 6 <NA>6 2/16/19 34 False 0.0 False False False 7 <NA>7 2/17/19 0 True 1.0 False True True 7 08 2/18/19 0 True 2.0 False True True 7 09 2/19/19 0 True 3.0 True False True 7 010 2/20/19 22 False 2.0 False False False 8 <NA>11 2/21/19 22 False 1.0 False False False 9 <NA>12 2/22/19 22 False 0.0 False False False 10 <NA>13 2/23/19 22 False 0.0 False False False 11 <NA>14 2/24/19 0 True 1.0 False True True 11 115 2/25/19 0 True 2.0 False True True 11 116 2/26/19 0 True 3.0 True True True 11 117 2/27/19 0 True 3.0 True False True 11 118 2/28/19 1 False 2.0 False False False 12 <NA>19 3/1/19 2 False 1.0 False False False 13 <NA>20 3/2/19 2 False 0.0 False False False 14 <NA>21 3/3/19 1 False 0.0 False False False 15 <NA>22 3/4/19 0 True 1.0 False True True 15 223 3/5/19 0 True 2.0 False True True 15 224 3/6/19 0 True 3.0 True False True 15 225 3/7/19 3 False 2.0 False False False 16 <NA>26 3/8/19 3 False 1.0 False False False 17 <NA>27 3/9/19 3 False 0.0 False False False 18 <NA>28 3/10/19 0 True 1.0 False False False 19 <NA>