はじめに
pandasのmergeで複数の列で同じ要素をもつ行のみを抽出する方法を説明する。mergeを用いる。
解説
モジュールのインポート
データの生成
データには、下記記事で用いたscikit-imageのregionprops_tableで作成したDataFrameを用いる。
[scikit-image] 68. ラベリングした領域のデータをregionprops_tableによりpandasのDataFrameで取得する(skimage.measure regionprops_table)
scikit-imageのregionprops_tableでラベリングした領域の情報を取得できるregionpropsのデータをpandasのDataFrameにする。
データフレーム1
label | area | centroid-0 | centroid-1 | equivalent_diameter | |
---|---|---|---|---|---|
0 | 1 | 183 | 4 | 357 | 15.264430 |
1 | 2 | 492 | 8 | 464 | 25.028661 |
2 | 3 | 221 | 17 | 283 | 16.774562 |
3 | 4 | 481 | 26 | 101 | 24.747287 |
4 | 5 | 476 | 28 | 173 | 24.618327 |
5 | 6 | 221 | 28 | 252 | 16.774562 |
6 | 7 | 228 | 32 | 478 | 17.038152 |
7 | 8 | 458 | 40 | 213 | 24.148369 |
8 | 9 | 422 | 48 | 383 | 23.179885 |
9 | 10 | 244 | 74 | 8 | 17.625846 |
10 | 11 | 225 | 75 | 384 | 16.925688 |
11 | 12 | 221 | 77 | 142 | 16.774562 |
12 | 13 | 343 | 91 | 506 | 20.897875 |
13 | 14 | 731 | 88 | 85 | 30.508001 |
14 | 15 | 221 | 96 | 302 | 16.774562 |
15 | 16 | 221 | 111 | 158 | 16.774562 |
16 | 17 | 221 | 129 | 386 | 16.774562 |
17 | 18 | 221 | 130 | 215 | 16.774562 |
18 | 19 | 221 | 131 | 46 | 16.774562 |
19 | 20 | 398 | 161 | 337 | 22.511094 |
20 | 21 | 468 | 166 | 282 | 24.410574 |
21 | 22 | 221 | 163 | 165 | 16.774562 |
22 | 23 | 221 | 171 | 211 | 16.774562 |
23 | 24 | 221 | 171 | 381 | 16.774562 |
24 | 25 | 221 | 187 | 419 | 16.774562 |
25 | 26 | 221 | 201 | 31 | 16.774562 |
26 | 27 | 221 | 207 | 335 | 16.774562 |
27 | 28 | 221 | 214 | 86 | 16.774562 |
28 | 29 | 221 | 223 | 235 | 16.774562 |
29 | 30 | 464 | 254 | 190 | 24.306031 |
30 | 31 | 221 | 250 | 244 | 16.774562 |
31 | 32 | 221 | 251 | 315 | 16.774562 |
32 | 33 | 221 | 260 | 121 | 16.774562 |
33 | 34 | 221 | 267 | 154 | 16.774562 |
34 | 35 | 979 | 287 | 363 | 35.305828 |
35 | 36 | 221 | 272 | 19 | 16.774562 |
36 | 37 | 221 | 277 | 332 | 16.774562 |
37 | 38 | 221 | 292 | 47 | 16.774562 |
38 | 39 | 221 | 293 | 306 | 16.774562 |
39 | 40 | 221 | 301 | 147 | 16.774562 |
40 | 41 | 225 | 303 | 10 | 16.925688 |
41 | 42 | 481 | 326 | 76 | 24.747287 |
42 | 43 | 221 | 330 | 212 | 16.774562 |
43 | 44 | 221 | 347 | 306 | 16.774562 |
44 | 45 | 221 | 374 | 216 | 16.774562 |
45 | 46 | 221 | 382 | 70 | 16.774562 |
46 | 47 | 221 | 385 | 30 | 16.774562 |
47 | 48 | 188 | 393 | 4 | 15.471556 |
48 | 49 | 488 | 403 | 450 | 24.926711 |
49 | 50 | 221 | 393 | 483 | 16.774562 |
50 | 51 | 221 | 395 | 378 | 16.774562 |
51 | 52 | 221 | 403 | 238 | 16.774562 |
52 | 53 | 221 | 419 | 482 | 16.774562 |
53 | 54 | 223 | 441 | 169 | 16.850294 |
54 | 55 | 418 | 454 | 398 | 23.069767 |
55 | 56 | 223 | 454 | 189 | 16.850294 |
56 | 57 | 221 | 456 | 250 | 16.774562 |
57 | 58 | 221 | 463 | 334 | 16.774562 |
58 | 59 | 221 | 471 | 104 | 16.774562 |
59 | 60 | 221 | 477 | 295 | 16.774562 |
60 | 61 | 221 | 481 | 245 | 16.774562 |
61 | 62 | 221 | 484 | 453 | 16.774562 |
62 | 63 | 249 | 502 | 500 | 17.805523 |
データフレーム2
label | area | centroid-0 | centroid-1 | equivalent_diameter | |
---|---|---|---|---|---|
0 | 1 | 4328 | 29 | 220 | 74.233286 |
1 | 2 | 578 | 7 | 357 | 27.128075 |
2 | 3 | 1831 | 18 | 469 | 48.283554 |
3 | 4 | 1308 | 25 | 100 | 40.809280 |
4 | 5 | 1834 | 58 | 383 | 48.323093 |
5 | 6 | 631 | 74 | 9 | 28.344561 |
6 | 7 | 1342 | 93 | 149 | 41.336273 |
7 | 8 | 941 | 91 | 501 | 34.613847 |
8 | 9 | 1876 | 89 | 86 | 48.873279 |
9 | 10 | 593 | 96 | 302 | 27.477828 |
10 | 11 | 606 | 129 | 385 | 27.777386 |
11 | 12 | 608 | 130 | 214 | 27.823185 |
12 | 13 | 602 | 130 | 46 | 27.685560 |
13 | 14 | 1226 | 162 | 337 | 39.509387 |
14 | 15 | 1226 | 166 | 282 | 39.509387 |
15 | 16 | 593 | 163 | 165 | 27.477828 |
16 | 17 | 611 | 170 | 210 | 27.891744 |
17 | 18 | 646 | 170 | 380 | 28.679483 |
18 | 19 | 611 | 186 | 418 | 27.891744 |
19 | 20 | 593 | 201 | 31 | 27.477828 |
20 | 21 | 606 | 206 | 335 | 27.777386 |
21 | 22 | 593 | 214 | 86 | 27.477828 |
22 | 23 | 1371 | 236 | 239 | 41.780515 |
23 | 24 | 3599 | 267 | 159 | 67.693346 |
24 | 25 | 4740 | 280 | 341 | 77.686263 |
25 | 26 | 2427 | 288 | 24 | 55.589139 |
26 | 27 | 1286 | 325 | 75 | 40.464627 |
27 | 28 | 601 | 330 | 212 | 27.662555 |
28 | 29 | 593 | 347 | 306 | 27.477828 |
29 | 30 | 1364 | 388 | 226 | 41.673718 |
30 | 31 | 617 | 382 | 69 | 28.028357 |
31 | 32 | 1324 | 388 | 19 | 41.058119 |
32 | 33 | 2845 | 404 | 466 | 60.186099 |
33 | 34 | 593 | 395 | 378 | 27.477828 |
34 | 35 | 1326 | 448 | 179 | 41.089118 |
35 | 36 | 1174 | 454 | 398 | 38.662427 |
36 | 37 | 1345 | 468 | 247 | 41.382450 |
37 | 38 | 610 | 463 | 333 | 27.868910 |
38 | 39 | 593 | 471 | 104 | 27.477828 |
39 | 40 | 610 | 476 | 295 | 27.868910 |
40 | 41 | 593 | 484 | 453 | 27.477828 |
41 | 42 | 612 | 500 | 498 | 27.914559 |
mergeによる結合
mergeのonにおいて、on=[‘centroid-0′,’centroid-1’]のようにリストでカラム名を指定すれば下記のようにcentroid-0とcentroid-1が等しい行のみのDataFrameを得ることができる。
label_x | area_x | centroid-0 | centroid-1 | equivalent_diameter_x | label_y | area_y | equivalent_diameter_y | |
---|---|---|---|---|---|---|---|---|
0 | 15 | 221 | 96 | 302 | 16.774562 | 10 | 593 | 27.477828 |
1 | 21 | 468 | 166 | 282 | 24.410574 | 15 | 1226 | 39.509387 |
2 | 22 | 221 | 163 | 165 | 16.774562 | 16 | 593 | 27.477828 |
3 | 26 | 221 | 201 | 31 | 16.774562 | 20 | 593 | 27.477828 |
4 | 28 | 221 | 214 | 86 | 16.774562 | 22 | 593 | 27.477828 |
5 | 43 | 221 | 330 | 212 | 16.774562 | 28 | 601 | 27.662555 |
6 | 44 | 221 | 347 | 306 | 16.774562 | 29 | 593 | 27.477828 |
7 | 51 | 221 | 395 | 378 | 16.774562 | 34 | 593 | 27.477828 |
8 | 55 | 418 | 454 | 398 | 23.069767 | 36 | 1174 | 38.662427 |
9 | 59 | 221 | 471 | 104 | 16.774562 | 39 | 593 | 27.477828 |
10 | 62 | 221 | 484 | 453 | 16.774562 | 41 | 593 | 27.477828 |
参考
[pandas] 17. DataFrameの結合(merge)
pandasのDataFrameを横方向に結合する(merge())について説明する。
pandas.DataFrame.merge — pandas 2.2.3 documentation
コメント