回答編集履歴
8
f
test
CHANGED
@@ -410,7 +410,7 @@
|
|
410
410
|
|
411
411
|
※このPhase2-1と2−2がこのプログラムの一番の鍵です。
|
412
412
|
|
413
|
-
ここでやってるのは、「列方向に
|
413
|
+
ここでやってるのは、「列方向にTrueが連続しているセルをFalseにする」という処理です。
|
414
414
|
|
415
415
|
画像処理でいうところの「エッジ検出処理」に近いです。
|
416
416
|
|
7
f
test
CHANGED
@@ -134,9 +134,17 @@
|
|
134
134
|
|
135
135
|
(読む前のポイントとして
|
136
136
|
|
137
|
-
`path_df.columns[-1]`は、`path_df`の一番最後の列のインデックスを示します。
|
137
|
+
`path_df.columns[-1]`は、`path_df`の一番最後(-1)の列(column)のインデックスを示します。
|
138
|
+
|
139
|
+
|
140
|
+
|
138
|
-
|
141
|
+
-1の意味は、リストでいう`a[-1]`と同じです。
|
142
|
+
|
143
|
+
|
144
|
+
|
139
|
-
この例では、`path_df.columns[-1]`は
|
145
|
+
この例では、path_dfは0、1、2の3列なので、`path_df.columns[-1]`は最後の列である「2」という数になります。
|
146
|
+
|
147
|
+
|
140
148
|
|
141
149
|
これ以降`path_df.columns[-1]`という長ったらしい部分が出てきても「2」という数に置き換えればよいので、多少読みやすくなりますね)
|
142
150
|
|
6
修正
test
CHANGED
@@ -184,8 +184,6 @@
|
|
184
184
|
|
185
185
|
上記`path_df`のデータのうち**「各pathの末端(葉)だけを残し、それ以外は`NaN`に変換する」**ことです。
|
186
186
|
|
187
|
-
このために以降ガチャガチャやっているものと思われます。
|
188
|
-
|
189
187
|
この最終目的を頭の片隅に押さえておいてください。
|
190
188
|
|
191
189
|
|
@@ -406,7 +404,7 @@
|
|
406
404
|
|
407
405
|
ここでやってるのは、「列方向にデータが連続しているセルをFalseにする」という処理です。
|
408
406
|
|
409
|
-
画像処理でいうところの「エッジ検出処理」に
|
407
|
+
画像処理でいうところの「エッジ検出処理」に近いです。
|
410
408
|
|
411
409
|
|
412
410
|
|
5
typo
test
CHANGED
@@ -184,7 +184,7 @@
|
|
184
184
|
|
185
185
|
上記`path_df`のデータのうち**「各pathの末端(葉)だけを残し、それ以外は`NaN`に変換する」**ことです。
|
186
186
|
|
187
|
-
このために以降ガチャガチャや
|
187
|
+
このために以降ガチャガチャやっているものと思われます。
|
188
188
|
|
189
189
|
この最終目的を頭の片隅に押さえておいてください。
|
190
190
|
|
4
key
test
CHANGED
@@ -402,6 +402,12 @@
|
|
402
402
|
|
403
403
|
|
404
404
|
|
405
|
+
※このPhase2-1と2−2がこのプログラムの一番の鍵です。
|
406
|
+
|
407
|
+
ここでやってるのは、「列方向にデータが連続しているセルをFalseにする」という処理です。
|
408
|
+
|
409
|
+
画像処理でいうところの「エッジ検出処理」に該当します。
|
410
|
+
|
405
411
|
|
406
412
|
|
407
413
|
# [Phase2-2]
|
3
v
test
CHANGED
@@ -288,7 +288,7 @@
|
|
288
288
|
|
289
289
|
a b c
|
290
290
|
|
291
|
-
0 NaN NaN NaN #
|
291
|
+
0 NaN NaN NaN #0行目、1行目は、存在しない-2行目、-1行目との差を計算することになるため、Nanになる。
|
292
292
|
|
293
293
|
1 NaN NaN NaN
|
294
294
|
|
@@ -304,7 +304,7 @@
|
|
304
304
|
|
305
305
|
そして`axis=1`とすると「行の比較」ではなく「列の比較」になります。
|
306
306
|
|
307
|
-
したがって`.diff(-1, axis=1)`とした場合「各データについて、1**列** 後ろのデータとの差」が抽出されます。(-1=負の数なので後ろのデータとの差分になります)
|
307
|
+
したがって`.diff(-1, axis=1)`とした場合「各データについて、1**列** **後ろ**のデータとの差」が抽出されます。(-1=負の数なので、前ではなく**後ろ**のデータとの差分になります)
|
308
308
|
|
309
309
|
|
310
310
|
|
@@ -312,19 +312,19 @@
|
|
312
312
|
|
313
313
|
|
314
314
|
|
315
|
-
`True - True = False(0)`
|
315
|
+
`True(1) - True(1) = False(0)`
|
316
|
-
|
317
|
-
|
318
|
-
|
316
|
+
|
317
|
+
|
318
|
+
|
319
|
-
`True - False = True(1)`
|
319
|
+
`True(1) - False(0) = True(1)`
|
320
|
-
|
321
|
-
|
322
|
-
|
320
|
+
|
321
|
+
|
322
|
+
|
323
|
-
`False - True = True(-1)`
|
323
|
+
`False(0) - True(1) = True(-1)`
|
324
|
-
|
325
|
-
|
326
|
-
|
324
|
+
|
325
|
+
|
326
|
+
|
327
|
-
`False - Fase = False(0)`
|
327
|
+
`False(0) - False(0) = False(0)`
|
328
328
|
|
329
329
|
|
330
330
|
|
@@ -358,13 +358,15 @@
|
|
358
358
|
|
359
359
|
|
360
360
|
|
361
|
-
に対して、
|
361
|
+
これに対して、
|
362
|
-
|
362
|
+
|
363
|
-
`
|
363
|
+
`.diff(-1, axis=1)`を適用すると、
|
364
|
+
|
365
|
+
|
366
|
+
|
364
|
-
|
367
|
+
0列目=0列目-1列目、
|
365
|
-
|
366
|
-
|
368
|
+
|
367
|
-
|
369
|
+
1列目=1列目-2列目... と演算されるため、
|
368
370
|
|
369
371
|
|
370
372
|
|
2
f
test
CHANGED
@@ -48,26 +48,30 @@
|
|
48
48
|
|
49
49
|
print()
|
50
50
|
|
51
|
+
|
52
|
+
|
51
53
|
# 重複削除
|
52
54
|
|
55
|
+
path_df = path_df.drop_duplicates()
|
56
|
+
|
53
57
|
print("[Phase1-2]重複削除")
|
54
58
|
|
55
|
-
path_df = path_df.drop_duplicates()
|
56
|
-
|
57
59
|
print(" path_df = path_df.drop_duplicates()")
|
58
60
|
|
59
61
|
print(" -> path_df:\n",path_df)
|
60
62
|
|
61
63
|
print()
|
62
64
|
|
65
|
+
|
66
|
+
|
63
67
|
# ソート
|
64
68
|
|
65
|
-
print("[Phase1-3]ソート")
|
66
|
-
|
67
69
|
path_df = path_df.sort_values(path_df.columns.tolist(),
|
68
70
|
|
69
71
|
na_position='first').reset_index(drop=True)
|
70
72
|
|
73
|
+
print("[Phase1-3](ソート)の完了後の")
|
74
|
+
|
71
75
|
print(" -> path_df:\n",path_df)
|
72
76
|
|
73
77
|
print()
|
@@ -96,30 +100,30 @@
|
|
96
100
|
|
97
101
|
print()
|
98
102
|
|
99
|
-
|
103
|
+
|
100
104
|
|
101
105
|
bottom_path_df[path_df.columns[-1]] = ~path_df.isnull()[path_df.columns[-1]]
|
102
106
|
|
107
|
+
print("[Phase2-2] (完了後)")
|
108
|
+
|
103
109
|
print(" bottom_path_df[path_df.columns[-1]] = ~path_df.isnull()[path_df.columns[-1]]")
|
104
110
|
|
105
111
|
print(" -> bottom_path_df:\n",bottom_path_df)
|
106
112
|
|
107
113
|
print()
|
108
114
|
|
109
|
-
|
115
|
+
|
110
116
|
|
111
117
|
bottom_path_df = path_df[bottom_path_df]
|
112
118
|
|
119
|
+
print("[Phase2-3] (完了後)")
|
120
|
+
|
113
121
|
print(" bottom_path_df = path_df[bottom_path_df]")
|
114
122
|
|
115
123
|
print(" -> bottom_path_df:\n",bottom_path_df)
|
116
124
|
|
117
125
|
print()
|
118
126
|
|
119
|
-
|
120
|
-
|
121
|
-
# print(bottom_path_df)
|
122
|
-
|
123
127
|
```
|
124
128
|
|
125
129
|
|
1
参考を追加
test
CHANGED
@@ -134,7 +134,7 @@
|
|
134
134
|
|
135
135
|
この例では、`path_df.columns[-1]`は常に「2」という数になっています。
|
136
136
|
|
137
|
-
これ以降`path_df.columns[-1]`という長ったらし
|
137
|
+
これ以降`path_df.columns[-1]`という長ったらしい部分が出てきても「2」という数に置き換えればよいので、多少読みやすくなりますね)
|
138
138
|
|
139
139
|
|
140
140
|
|
@@ -308,19 +308,19 @@
|
|
308
308
|
|
309
309
|
|
310
310
|
|
311
|
-
`True-True=False(0)`
|
311
|
+
`True - True = False(0)`
|
312
|
-
|
313
|
-
|
314
|
-
|
312
|
+
|
313
|
+
|
314
|
+
|
315
|
-
`True-False=True(1)`
|
315
|
+
`True - False = True(1)`
|
316
|
-
|
317
|
-
|
318
|
-
|
316
|
+
|
317
|
+
|
318
|
+
|
319
|
-
`False-True=True(-1)`
|
319
|
+
`False - True = True(-1)`
|
320
|
-
|
321
|
-
|
322
|
-
|
320
|
+
|
321
|
+
|
322
|
+
|
323
|
-
`False-Fase=False(0)`
|
323
|
+
`False - Fase = False(0)`
|
324
324
|
|
325
325
|
|
326
326
|
|
@@ -356,7 +356,7 @@
|
|
356
356
|
|
357
357
|
に対して、
|
358
358
|
|
359
|
-
path_df.isnull().diff(-1, axis=1)を適用すると、
|
359
|
+
`path_df.isnull().diff(-1, axis=1)`を適用すると、
|
360
360
|
|
361
361
|
|
362
362
|
|
@@ -392,7 +392,7 @@
|
|
392
392
|
|
393
393
|
|
394
394
|
|
395
|
-
これがPhase2-1終了後のbottom_path_dfの中身です。
|
395
|
+
これがPhase2-1終了後の`bottom_path_df`の中身です。
|
396
396
|
|
397
397
|
|
398
398
|
|
@@ -504,13 +504,15 @@
|
|
504
504
|
|
505
505
|
データのインデックスにFalseを指定するとそのデータはNaNになります。
|
506
506
|
|
507
|
-
|
508
|
-
|
509
|
-
path_dfは
|
507
|
+
`path_df`は 元コードの最初の方でwalk()関数で得たディレクトリ構造の各データを保持しています.
|
510
|
-
|
508
|
+
|
509
|
+
|
510
|
+
|
511
|
-
こ
|
511
|
+
この`path_df`に対して、True/Falseで構成された`bottom_path_df`をインデックスとして適用することで、
|
512
|
-
|
512
|
+
|
513
|
+
|
514
|
+
|
513
|
-
bottom_path_dfがTrueとなっているデータは生き残り、FalseとなっているセルはNaNとなります。
|
515
|
+
`bottom_path_df`がTrueとなっているデータは生き残り、FalseとなっているセルはNaNとなります。
|
514
516
|
|
515
517
|
|
516
518
|
|
@@ -542,4 +544,12 @@
|
|
542
544
|
|
543
545
|
|
544
546
|
|
545
|
-
以上により、bottom_path_df には、末端(葉)のデータだけ存在するようになりました。
|
547
|
+
以上により、`bottom_path_df` には、末端(葉)のデータだけ存在するようになりました。
|
548
|
+
|
549
|
+
|
550
|
+
|
551
|
+
参考:
|
552
|
+
|
553
|
+
https://note.nkmk.me/python-pandas-diff-pct-change/
|
554
|
+
|
555
|
+
https://qiita.com/0NE_shoT_/items/8db6d909e8b48adcb203
|