回答編集履歴
1
コメントを受けて回答を追記
test
CHANGED
@@ -177,3 +177,67 @@
|
|
177
177
|
|
178
178
|
|
179
179
|
一応わかりやすいようにコメントをふっておきましたが、よく解らない場合はコメント欄で質問してください。
|
180
|
+
|
181
|
+
|
182
|
+
|
183
|
+
---
|
184
|
+
|
185
|
+
|
186
|
+
|
187
|
+
** 【追記】**
|
188
|
+
|
189
|
+
作成されるDFの列数が不定の場合の処理
|
190
|
+
|
191
|
+
|
192
|
+
|
193
|
+
```Python
|
194
|
+
|
195
|
+
# Xが50以上の箇所にフラグを立てる
|
196
|
+
|
197
|
+
df['flag'] = (df['X'] > 50)
|
198
|
+
|
199
|
+
# 上記のフラグの纏まり毎にグループIDを振る
|
200
|
+
|
201
|
+
df['grp'] = (df.shift()['flag'] != df['flag']).cumsum()
|
202
|
+
|
203
|
+
|
204
|
+
|
205
|
+
# GroupID を変換
|
206
|
+
|
207
|
+
def conv(d):
|
208
|
+
|
209
|
+
if d % 4 == 1:
|
210
|
+
|
211
|
+
ret = d
|
212
|
+
|
213
|
+
elif d % 4 == 2:
|
214
|
+
|
215
|
+
ret = d-1
|
216
|
+
|
217
|
+
elif d % 4 == 3:
|
218
|
+
|
219
|
+
ret = 0
|
220
|
+
|
221
|
+
else:
|
222
|
+
|
223
|
+
ret = d
|
224
|
+
|
225
|
+
return ret
|
226
|
+
|
227
|
+
|
228
|
+
|
229
|
+
df['grp'] = df['grp'].map(conv)
|
230
|
+
|
231
|
+
# GroupID 0 を削除
|
232
|
+
|
233
|
+
df = df.loc[df['grp']!=0]
|
234
|
+
|
235
|
+
# GroupID毎に列にまとめる
|
236
|
+
|
237
|
+
ret = df.groupby('grp')['X'].apply(lambda d: d.reset_index(drop=True)).unstack().T
|
238
|
+
|
239
|
+
# カラム名を0から振り直す
|
240
|
+
|
241
|
+
ret.column = range(ret.shape[1])
|
242
|
+
|
243
|
+
```
|