将二进制序列{0,1}
视为 Pandas DataFrame:第一列 'a' 是原始序列,列 'b' 是所需的输出。如果间隙(连续的 0 序列)大于某个常数 k(在这种情况下,k=4),则目标是连接 1 的块。
df
a b
180 1 1
181 1 1
182 1 1
183 0 0
184 0 0
185 0 0
186 0 0
187 0 0
188 0 0
189 1 1
190 1 1
191 1 1
192 1 1
193 1 1
194 1 1
195 0 **1**
196 0 **1**
197 0 **1**
198 1 1
199 1 1
200 1 1
201 0 **1**
202 1 1
203 1 1
204 1 1
205 1 1
206 1 1
207 1 1
208 1 1
209 1 1
210 1 1
211 0 **1**
212 0 **1**
213 1 1
214 1 1
215 1 1
216 1 1
217 1 1
218 1 1
219 1 1
220 1 1
221 1 1
222 1 1
223 1 1
224 1 1
225 0 **1**
226 1 1
227 1 1
228 1 1
229 0 **1**
230 1 1
231 1 1
232 1 1
233 1 1
234 1 1
235 1 1
236 0 **1**
237 1 1
238 1 1
我正在研究 Pandas,非常感谢整洁的 Pandasian 解决方案。
你可以试试这个:
k=4
df['zeros'] = df.groupby(df.a.cumsum()).cumcount()
df2 = df.assign(b=np.logical_or(df.groupby(df.a.cumsum())['zeros'].transform('max').mask(df.a.astype(bool)).le(k).astype(int),df.a).astype(int)).drop('zeros',axis=1)
print(df2)
输出:
a b
180 1 1
181 1 1
182 1 1
183 0 0
184 0 0
185 0 0
186 0 0
187 0 0
188 0 0
189 1 1
190 1 1
191 1 1
192 1 1
193 1 1
194 1 1
195 0 1
196 0 1
197 0 1
198 1 1
199 1 1
200 1 1
201 0 1
202 1 1
203 1 1
204 1 1
205 1 1
206 1 1
207 1 1
208 1 1
209 1 1
210 1 1
211 0 1
212 0 1
213 1 1
214 1 1
215 1 1
216 1 1
217 1 1
218 1 1
219 1 1
220 1 1
221 1 1
222 1 1
223 1 1
224 1 1
225 0 1
226 1 1
227 1 1
228 1 1
229 0 1
230 1 1
231 1 1
232 1 1
233 1 1
234 1 1
235 1 1
236 0 1
237 1 1
238 1 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句