将二进制序列{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
我正在研究熊猫和整洁的pandasian解决方案将受到高度赞赏。
答案 0 :(得分:1)
你可以试试这个:
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