[pandas] 20. pd.mergeでDataFrameの複数の列で同じ値をもつ行のみを抽出

Pandas

はじめに

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

コメント