2017-05-30 62 views
0

考慮一個二進制序列{0,1}作爲熊貓數據幀: 第一列'a'是原始序列,'b'列是所需輸出。如果間隙(0的連續序列)大於某個常數k(在這種情況下,k = 4),則目標是連接1的塊。熊貓的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 

我正在研究熊貓和整潔的熊貓解決方案將不勝感激。

+0

澄清......你想零點改變的,如果連續零的塊,均小於小於或等於4在這種情況下是對的? –

+0

是的!如果有差距(零)小於4,那麼這些差距應該變爲1。 –

回答

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